Mysqldump 在备库进行备份时会阻塞备库的sql_thread

来源:这里教程网 时间:2026-03-01 16:18:38 作者:

情况描述:

    读写分离环境,Mysql 主库正常。

    备库存在大查询持续了7个小时之久。

    夜间10点备份启动出现waiting for table flush 等待事件。

    备份后面进来的会话出现积压且前台应用被阻塞。

处理过程:

    收到报警后检查主从延迟情况,show slave status\G;有延迟。 

    select * from information_schema.processlist order by time desc; 检查当前session 的执行情况。看到有4个session 执行了28000s 未执行完成, 有会话处于waiting for table flush 状态。此4个会话从堡垒机终端过来确定不是应用中的session。

    将此4个session kill 掉, show processlist 查看会话状态, 恢复正常, 主从延迟追平。

故障处理过后回想什么原因导致会话积压,前台应用被阻塞。

    大查询未结束。

    mysqldump 在备份时会进行flush table 操作出现等待。

    flush table 操作无法完成后面的session 被阻塞。

测试环境复现场景中发现的现象:    1.  使用mysqldump 在备库进行备份,备份sql中不加--single-transaction 时,主库中对表进行update 操作从库的sql_thread 线程会被mdl 锁阻塞,出现主从延迟。 需要掌握的知识点:mysqldump 备份的整个过程: https://www.cnblogs.com/digdeep/p/12455757.html MDL 锁: https://www.cnblogs.com/zengkefu/p/5690385.html

相关推荐