【MYSQL】主从复制延迟,Waiting for dependent transaction to commit
收到监控报警,某套Mysql5.7数据库主从延迟过高,且持续增长。经分析确认,应用负责人在手工补跑数据,提交了大事务,这种情况下不能也无法人工干预,只能静静等从库跟上来。另,主库3小时内就已经全部跑完补跑的数据,但从库却花了一整天才追上主库,mysql性能问题是值得诟病的。
·
收到监控报警,某套Mysql5.7数据库主从延迟过高,且持续增长。经分析确认,应用负责人在手工补跑数据,提交了大事务,这种情况下不能也无法人工干预,只能静静等从库跟上来。另,主库3小时内就已经全部跑完补跑的数据,但从库却花了一整天才追上主库,mysql性能问题是值得诟病的。
一、案发情况
1、收到邮件报警
2、查看同步状态,确认同步线程还在线以及当前处理的binlog文件和位置
3、使用mysqlbinlog 翻译binlog事务,并联系应用责任人了解当下发生了啥业务。mysqlbinlog命令及结果如下
#!/bin/ksh
#mysql用户执行
Master_Log_File=#Master_Log_File#
Master_Log_Pos=#Master_Log_Pos#
datadir=`mysql -usysdba -padmin123 -e "show variables like '%datadir%'"|grep datadir |awk '{print $2}'`
tmp=${datadir%data/}"log/bin_log/"
binlogfile=$tmp$Master_Log_File
echo "binlog文件路径:"$binlogfile
mysqlbinlog -vv --base64-output=decode-row $binlogfile --start-position=$Master_Log_Pos |head -n 100
4、电话沟通后,确认是应用责任人在补跑数据,目前等待就行了,从库会自动跟上主库。如果万一从库发生意外永远跟不上了,那就应急处理“用主库的备份文件恢复备库”
二、发生主从延迟时,常规的处理步骤
1、查看同步状态,确认同步线程还在工作;
2、查看binlog文件,确认当前同步线程正在处理的过程;
3、电话/邮件/微信尽快联系应用负责人,确认当前时段是否有批量/程序在进行数据库操作;
4、等待从库跟上主库,通常要好几个小时,大部分情况下自动跟上;
5、如果主从同步断掉,需具体问题具体分析;
更多推荐
已为社区贡献1条内容
所有评论(0)