MySQL主从复制SQL线程停止超时怎么办?怎么快速修复和远程处理?

文章导读
快速修复方法:在从库上执行 STOP SLAVE; START SLAVE; 命令重启SQL线程。如果远程处理,用SSH登录从服务器,运行 mysql -u root -p -e "STOP SLAVE; START SLAVE; SHOW SLAVE STATUS\G;" 查看状态,确保Seconds_Behind_Master变小。超时通常是因为网络抖动或大事务,检查主库relay log后直
📋 目录
  1. 实际操作案例
  2. 论坛用户分享
  3. 运维博客摘录
  4. 经验贴
  5. 群里讨论
  6. FAQ
A A

快速修复方法:在从库上执行 STOP SLAVE; START SLAVE; 命令重启SQL线程。如果远程处理,用SSH登录从服务器,运行 mysql -u root -p -e "STOP SLAVE; START SLAVE; SHOW SLAVE STATUS\G;" 查看状态,确保Seconds_Behind_Master变小。超时通常是因为网络抖动或大事务,检查主库relay log后直接跳过错误点用 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

实际操作案例

昨天遇到SQL线程停止,显示Last_Error: Got timeout reading communication packets,Seconds_Behind_Master一直No。直接在从库mysql里执行stop slave io_thread; stop slave sql_thread; 然后 change master to master_host='主IP',master_user='repl',master_password='xxx',master_log_file='mysql-bin.000018',master_log_pos=1234567; start slave io_thread; start slave sql_thread; 瞬间恢复了。远程用ansible脚本批量执行,超级方便。

论坛用户分享

主从复制SQL线程卡住超时了,show slave status显示Sql_running: No,Error 'Got timeout reading communication packets'。解决:登录从库,执行SET GLOBAL sql_slave_skip_counter = 1; START SLAVE; 然后监控show slave status\G; 看relay_log_space有没有在增长。远程的话,用mysql命令行加-e参数:mysql -h从库IP -uroot -p密码 -e "SET GLOBAL sql_slave_skip_counter=1; START SLAVE; SHOW SLAVE STATUS\G;" 一条龙搞定。

运维博客摘录

SQL线程停止常见原因是IO线程读主库binlog超时。先检查网络ping主库延迟,如果>100ms就优化网络。然后从库执行flush tables with read lock; show master status; unlock tables; 记录位置后stop slave; reset slave; change master to ... 用刚才位置; start slave。远程处理脚本:ssh user@从库 "mysql -uroot -p密码 -e 'stop slave; reset slave; change master to master_log_file=\'mysql-bin.xxxx\',master_log_pos=xxx; start slave;'"。

MySQL主从复制SQL线程停止超时怎么办?怎么快速修复和远程处理?

经验贴

遇到过SQL线程超时停了,原因是主库有个大事务卡住。从库直接kill掉sql slave进程,再start slave就好了。命令:show processlist; 找到Slave_SQL线程ID,kill ID; 然后stop slave; start slave。远程监控用zabbix警报,脚本自动执行stop/start。修复后加gtid_mode=ON避免位置问题。

群里讨论

哥们SQL线程超时咋办?答:从库进mysql,show slave status\G看错误,多数是relay log corrupt或timeout。用stop slave; set global relay_log_purge=0; reset slave; start slave。远程用expect脚本自动输入密码,免登录批量修复多从环境。

FAQ

Q: SQL线程停止后怎么判断是超时还是其他错误?
A: 用show slave status\G; 看Last_SQL_Error字段,如果有'Got timeout reading communication packets'就是超时,其他如Duplicate entry就是数据冲突。

MySQL主从复制SQL线程停止超时怎么办?怎么快速修复和远程处理?

Q: 修复后会不会丢失数据?
A: 如果skip counter跳过,会少同步一条语句,可能丢数据,生产慎用,先对比主从数据一致性。

Q: 怎么防止SQL线程经常超时?
A: 调大slave_net_timeout=600,主库binlog少点大事务,网络用专线,监控Seconds_Behind_Master。

Q: 远程修复需要什么工具?
A: SSH+mysql命令行,或ansible playbook,写个简单yaml批量stop/start slave。