MySQL主从数据库不同步的2种解决方法

青禾
青禾
发布时间:2026-10-14 | 5人浏览过
原创

当MySQL主从复制出现故障(如Slave_SQL_Running: No)时,解决方案取决于对数据一致性的要求。如果允许少量差异,可通过命令跳过当前错误继续同步;如果需要严格的数据一致性,则需要锁定主库、备份数据并在从库重建同步链路。

故障现象诊断

在主库和从库均运行正常的情况下,若发现主从不同步,首先需要通过以下命令排查状态:

1. 检查主库(Master)状态

  • 使用 show processlist; 查看是否有大量 Sleep 进程或异常查询。
  • 使用 show master status; 确认可写位置及二进制日志文件名。正常输出应包含 File(如 mysqld-bin.000001)和对应的 Position。

2. 检查从库(Slave)状态

登录从库执行:show slave status\G

重点关注以下两个字段:

  • Slave_IO_Running:应为 Yes,表示IO线程正常接收主库日志。
  • Slave_SQL_Running:若显示为 No,则表示SQL线程执行出错,导致同步中断。

方法一:忽略错误后,继续同步

适用场景:主从库数据相差不大,或者对数据一致性要求不严格(允许短暂不一致或个别记录丢失),仅希望快速恢复同步状态。

操作步骤

通过设置全局变量跳过当前出错的SQL事务步骤:

  1. 停止从库同步:
    stop slave;
  2. 设置跳过计数器:
    set global sql_slave_skip_counter = 1;
    此命令指示 Slave 线程在重连后,跳过当前的一个事件(通常是引发错误的那个语句)。若问题复杂可能需要多次执行,但通常设为1即可应对多数因语句报错导致的停滞。
  3. 启动从库同步:
    start slave;
  4. 验证状态:
    再次执行 show slave status\G,确认 Slave_IO_Running 和 Slave_SQL_Running 均变为 Yes。

方法二:重新做主从,完全同步

适用场景:主从库数据相差较大,或业务要求主从数据必须完全一致。该方法风险较高,需先在生产环境进行完整备份。

重要提醒:在执行任何数据覆盖操作前,请务必确保已有有效的全量备份。

第1步:主库锁表与备份

为防止备份期间有新数据写入导致数据不一致:

  1. 锁定主库为只读:
    mysql> flush tables with read lock;
    注意:该状态下主库仅支持读取,无法写入。
  2. 记录当前同步点:
    打开另一个窗口或通过其他工具查询 show master status;,记下 File(日志文件名)和 Position(偏移量)的值。例如:File: mysqld-bin.000001, Position: 3260。
  3. 执行数据导出:
    mysqldump -uroot -p -hlocalhost > mysql.bak.sql
  4. 解锁主库:
    unlock tables; (完成导出后立即解锁,减少业务影响时间)。

第2步:传输与恢复数据到从库

  1. 传输备份文件:
    使用 scp 或其他安全传输工具将 mysql.bak.sql 复制到从库服务器。
    [root@server01 mysql]# scp mysql.bak.sql root@从库IP:/tmp/
  2. 停止从库同步服务:
    mysql> stop slave;
  3. 恢复数据:
    登录从库 MySQL,执行源数据导入。
    mysql> source /tmp/mysql.bak.sql

第3步:重新配置并开启同步

  1. 设置主从连接参数:
    在从库中执行 change master to 命令,指定新的同步起点。参数包括主库IP、账号密码以及第二步记录的日志文件和位置点。
    change master to
    master_host='主库IP',
    master_user='rsync',
    master_port=3306,
    master_password='',
    master_log_file='mysqld-bin.000001',
    master_log_pos=3260;

    注意:请根据实际环境的用户名、密码及第1步查到的具体 File/Position 值替换上述参数。
  2. 开启同步:
    mysql> start slave;
    (注:原文此处误写为 stop slave,实际操作应为 start 开启)
  3. 最终检查:
    show slave status\G
    确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes,且无报错信息。

以上就是 MySQL 主从数据库不同步的详细内容,更多关于 MySQL 主从同步配置与维护的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表