无法同步的问题:
1.问题1
1.1 Slave_IO_Running No
Slave_IO_Running No
1.2 为什么会出现Slave_IO_Running No
- mysql-master 重启过,导致容器对应的IP变更了
- mysql-master 同步账号:slave或密码:123456变更过
- master_log_file这个值不和mysql-master里面的File值不一样
- master_log_pos这个值不和mysql-master里面的Position值不一样
1.3解决办法如下
# 第一步:停止slave节点
stop slave;
# 第二步:在slave节点上重新主从同步一下(sql语句)
change master to master_host='master变更后的IP地址', master_user='master账号', master_password='master密码', master_port=3306, master_log_file='待变更的日志名', master_log_pos= 待变更的Position, master_connect_retry=30;
# 第三步:重启slave节点
start slave;
1.4解决mysql-master里面的File或Position的值一直在变问题
解决方案1.将程序里面的写操作都停止运行,File或Position的值不会变
解决方案2
第一步:FLUSH TABLE WITH READ LOCK;(锁库)
第二步:到这一步,File或Position的值不会变;可以在slave里面重新主从同步一下
第三步:unlock tables(打开全局锁)
2.问题2
2.1Slave_SQL_Running No
Slave_SQL_Running No
2.2 为什么会出现Slave_SQL_Running No
- mysql-master(主)数据与mysql-slave(从)数据不一致,导致从执行sql报错
2.3解决办法如下
# 第一步:停止slave节点
stop slave;
# 第二步:将master库中的数据同步到slave库里面
# 第三步:在slave节点上重新主从同步一下(sql语句)
change master to master_host='master变更后的IP地址', master_user='master账号', master_password='master密码', master_port=3306, master_log_file='待变更的日志名', master_log_pos= 待变更的Position, master_connect_retry=30;
# 第三步:重启slave节点
start slave;
3.注意事项
- master与slave实现了主从后,不要重新启动容器(也可以用master的宿主机ip代替容器ip,但是效率会慢一点)
- master只负责写,slave只负责读;slave最好创建一个只读账号对外访问
4.说明
以上问题都是我目前遇到过的问题,还有其他问题及解决办法欢迎在评论区进行补充