1.环境
操作系统:CentOS-7
MySQL:mysql-5.7
192.168.15.129 master
192.168.15.130 slave
2.主库配置
vi /etc/my.cnf
在[mysqld]下增加如下两行设置:
[mysqld] log-bin=mysql-bin server-id=1
创建数据同步账户
CREATE USER 'repl'@'192.168.15.%' IDENTIFIED BY '666666'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.15.%'; FLUSH PRIVILEGES;
查看matser状态: show master status;
3.从库配置
vi /etc/my.cnf
[mysqld] log-bin=mysql-bin server-id=2 log-error=/var/log/mysqld.log # 异常日志存放位置
执行同步命令
change master to master_host='192.168.15.129', master_user='repl', master_password='666666', master_log_file='mysql-bin.000002', master_log_pos=154; # 设置从库只读 set global super_read_only=1; # 锁表 flush tables with read lock; # 锁表(所有角色都只读,但是会影响主从同步) # 解锁 unlock tables;
查看slave状态: show slave status\G;
4.异常解决
[ERROR] Slave I/O for channel '': Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size', Error_code: 1236
解决方法:
mysql> flush logs; Query OK, 0 rows affected (0.02 sec) mysql> show master status; +---------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------------+----------+--------------+------------------+-------------------+ | dbmaster-bin.000005 | 120 | | | | +---------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
记住file和position这两个选项
mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> change master to master_log_file ='dbmaster-bin.000005',master_log_pos=120; Query OK, 0 rows affected (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec)
搞定收工!
gitee源码地址:https://gitee.com/kk-dad/msrepl