背景:收到线上告警短信,主从复制连接超时
处理:登录从库查看可以发现Slave_SQL_Running状态为No, Last_Errno错误号为1032,并且根据错误日志信息得出是主库treasurer.pub_bank_fl_20210331表和从库treasurer.pub_bank_fl_20210331表数据不一样导致sql线程出错
引起错误号1032的原因的基本上都是因为主库执行update、insert、delete语句造成的。
根据公司规定先解决告警错误,再分析原因的原则,具体操作如下:
因为公司规定线上不允许使用第三方工具,主库与从库之间无法做数据对比,只能手工找出与主库不同的数据进行修改,好在数据库所有dml操作在邮件中都有记录,通过搜索邮件sql脚本中带pub_bank_fl_20210331表名的语句都列举出来,通过反推查找出不一致的数据,打个比方:
UPDATE pub_bank_fl_20210331 SET acct_belong_ou_id = 'X23020' WHERE acct_no in('3500042109200031923','3500042109014486683','3500044119054005885','3500044109200012002') and acct_belong_ou_id = '192301';
变成如下查询,查找主从库不同的数据:
从库:SELECT * FROM treasurer.pub_bank_fl_20210331 WHERE acct_no in('3500042109200031923','3500042109014486683','3500044119054005885','3500044109200012002') and acct_belong_ou_id = '192301';
主库:SELECT * FROM treasurer.pub_bank_fl_20210331 WHERE acct_no in('3500042109200031923','3500042109014486683','3500044119054005885','3500044109200012002') and acct_belong_ou_id = 'X23020';
得出结论,确实有3条update语句在主库修改生效,而在从库却没有生效, 具体如下操作:
自此告警消失:
其实也有别的解决办法,我如果没在邮件中找到对此表的dml操作,就会选择从库线程重建。
如果有数据对比工具拿更容易,像MySQL Utilities可以主从对比直接生成差异化sql,之前在csdn中有写到,贴一个链接:blog.csdn.net/nzy15854627…