MySQL主从同步配置步骤
1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录。
参考多实例配置:https://www.shnne.com/post/171.html
2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不开启从库log-bin功能,注意:配置参数后要重启生效。
主库配置修改如下查看的参数:(在[mysqld]下)
[root@shnne 3307]# egrep "log-bin|server-id" /data/3306/my.cnf log-bin = /data/3306/mysql-bin server-id = 1
登录主库检查是否开启成功,看目录下是否有logbin日志,或者登录主库的mysql通过下面的命令检查状态。
mysql> show variables like "log_bin"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec)
从库的配置只要server-id和主库不同即可。
3.登录主库增加用于从库连接主库同步的账户例如:rep,并授权replication slave同步的权限。
grant replication slave on *.* to 'rep'@'192.168.1.%' identified by 'shnne123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
4.登录主库,整库锁表flush table with read lock;(窗口关闭后即失效,超时参数到了也失效),然后show master status 查看binlog的位置状态,show master logs;
注:mysql5.5 flush table with read lock;
mysql5.1 flush tables with read lock;
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 1127282 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) mysql> show master logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 126 | | mysql-bin.000002 | 126 | | mysql-bin.000003 | 2761 | | mysql-bin.000004 | 888 | +------------------+-----------+ 4 rows in set (0.00 sec)
5.新开窗口,Linux命令行备份或导出主库原有的数据库数据,并拷贝到从库所在的服务器目录。
mysql -uroot -p123456 -S /data/3306/mysql.sock -A -B > /backup/mysql_allsql_bak.$(date +%F).sql
6.解锁主库,unlock tables;
注:因为之前有所表的行为,如果不想执行锁表的命令,可以在第5步的备份数据库的时候,直接加-x 进行锁表操作。
如:mysqldump -uroot -p123456 -A -B -F --master-data=2 -x --events -S /data/3306/mysql.sock|gzip >/backup/all.sql.gz
#--master-data=2 会记录导出数据库文件当时log_bin的位置(2代表前面有--注释 ), -x表示锁表 ,-F表示在备份之前先刷新日志,-B表示导出文件的时候会添加一些创建数据库的语句,-A表示全部备份。
7.把主库导出的原有数据恢复到从库。
mysql -uroot -p123456 -S /data/3307/mysql.sock<all.sql
注:因为之前有-B参数,不需要指定数据库还原。
8.根据主库的show master status 查看binlog的位置状态,登陆从库执行下列语句
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='shnne123456',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=888;
上面两个标紫色的,如果在主库导出备份的时候添加了--master-data=1的参数,可以不用执行。
检查
cat /data/3307/data/master.info
9.从库开启同步开关,start slave;
10.从库show slave status\G,检查同步的状态,并在主库进行更新测试。
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.17.147.11 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 1127195 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes #一个yes,开启IO线程 Slave_SQL_Running: Yes #第二个yes,开启mysql线程 Replicate_Do_DB: Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 888 #主库log-bin文件开始的位置 Relay_Log_Space: 403 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 #延迟的秒数 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
在主库创建数据库,创建表,并在从库查看是否成功。
注:如果做主从从级联,需要在中间的从库的my.cnf开启如下两个参数,并重启,然后配置和上面的从库同样的配置
log_slave_updates=1
log-bin=/cifpay/mysql-bin.log
如果需要跳过错误,需要在从库的my.cnf里的mysqld里面添加如下内容
slave-skip-errors = 1062,.... #跳过错误号,逗号指定多个
replicate-do-db= shnne,.... #同步某个指定的数据库,逗号指定多个
replicate-ignore-db=mysql,..... #跳过同步指定的数据库,逗号指定多个
设置从库只读
可以在
[mysqld]
read-only
重启数据库
还有一种是在启动的时候加--read-only(要修改启动脚本,麻烦)
<< 上一篇
网友留言(0 条)