docker部署mysql容器 1主3从出现无法同步问题及解决办法

246 阅读2分钟

无法同步的问题:

1.问题1

1.1 Slave_IO_Running No

Slave_IO_Running No

1.2 为什么会出现Slave_IO_Running No

  1. mysql-master 重启过,导致容器对应的IP变更了
  2. mysql-master 同步账号:slave或密码:123456变更过
  3. master_log_file这个值不和mysql-master里面的File值不一样
  4. 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

  1. 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.注意事项

  1. master与slave实现了主从后,不要重新启动容器(也可以用master的宿主机ip代替容器ip,但是效率会慢一点)
  2. master只负责写,slave只负责读;slave最好创建一个只读账号对外访问

4.说明

以上问题都是我目前遇到过的问题,还有其他问题及解决办法欢迎在评论区进行补充