结论

mysql主从复制的关机顺序实际上很重要。如果关机顺序不当,可能导致数据丢失、复制中断,数据不一致或类似问题(如重复执行事务)。合理的关机顺序可以确保主从复制状态的完整性和一致性。

此类问题会引起的常见报错

  1. Slave_IO_RunningSlave_SQL_Running至少一个为NO
  2. 常见 Last_Error为database exists’ on query,userexists’ on query.等,都是说数据库已经存在,用户已经存在啊等等,反正就是他现在想要同步的数据已经存在,出现冲突了。(实际上在上次关机之前已经同步过了,但是他忘了,当第一次同步。)
  3. Seconds_Behind_Master: NULL
    4.Slave SQL for channel ‘’: Slave failed to initialize relay log

案发现场截图

在这里插入图片描述

问题解决方法

# 停止slave
stop slave;
# 	初始化slave
reset slave;
# 启动slave
start slave;
#### 此时应该会报错,但是报错基本就是某些数据/用户/表/数据库已经存在,此时只需要删除slave所在数据库的相应数据让他再次同步即可。

主从复制关机与开机建议顺序

推荐的关机顺序

  1. 优先关闭从服务器
    在关闭主服务器之前,先停止从服务器上的复制线程。这可以避免从服务器在主服务器关闭后尝试从主服务器拉取日志而发生错误。
  2. 然后关闭主服务器
    关闭主服务器时,确保事务已提交并记录到二进制日志中。

详细步骤

关闭从服务器
  1. 停止复制线程
    在从服务器上运行以下命令:

    STOP SLAVE;
    
  2. 检查复制状态
    确认复制线程已停止:

    SHOW SLAVE STATUS\G;
    

    确保 Slave_IO_RunningSlave_SQL_Running 均为 No

  3. 关闭从服务器
    安全地关闭 MySQL 服务:

    systemctl stop mysql
    

关闭主服务器
  1. 检查活动事务
    确保没有未完成的事务,尤其是对于需要同步到从服务器的事务。可以使用以下命令检查:

    SHOW PROCESSLIST;
    
  2. 刷新并同步日志
    在关闭主服务器之前,刷新二进制日志,确保所有事务写入日志文件:

    FLUSH LOGS;
    
  3. 关闭主服务器
    使用以下命令安全地停止主服务器:

    systemctl stop mysql
    

重新启动顺序

  1. 先启动主服务器
    确保主服务器正常运行,监听指定端口,并可以接受从服务器的连接。

  2. 检查主服务器状态
    使用以下命令检查主服务器的状态:

    SHOW MASTER STATUS\G;
    
  3. 再启动从服务器
    启动从服务器后,确认主从复制正常运行:

    START SLAVE;
    SHOW SLAVE STATUS\G;
    

注意事项

  1. 避免从服务器独立运行
    如果主服务器已关闭,而从服务器仍在尝试同步日志,可能导致复制错误或状态混乱。
  2. 事务一致性
    在主服务器关闭前,确保所有事务已提交并同步到从服务器。
  3. 日志和位置
    在每次重新配置主从复制或遇到问题时,确保主从日志位置正确匹配。
  4. 启用 GTID(可选)
    使用 GTID 模式,可以进一步简化主从复制的管理,避免复杂的日志位置匹配问题。

总结

关机顺序的基本原则是:

  1. 从服务器先关,确保复制线程停止。
  2. 主服务器后关,确保日志完整写入。

启动时,顺序相反:先主后从。

正确的顺序和操作可以避免大多数主从复制问题,如事务丢失、日志不一致等。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐