起因:MHA切换演练时,将主节点断开,备节点承担主服务,业务测试正常;后将MHA恢复至原先状态,导致主键冲突,数据分散在主备数据库上,主从中断。
初步做法:找出备库与主库的差异数据,在主库上修复完整,删除从库的多余数据,由于数据量插入较多,且时间有限,停用主库,让备库与从库单跑。
第二阶段修复:
1、凌晨停机维护,关闭应用服务;
2、按照上次停应用--->数据库恢复之间的时间段对比差异数据,navicat挺好使用的,把原主数据库中的多的数据补充到备库上,这样备库的数据就全了;
3、在备库上执行
mysqldump -uUSER -pPASSWD database_name table_name -w"CRE_TIME >= '2018-08-02 00:00:00' " >/data/backup/table_name.sql
库里有多少张表就要导出多少个sql语句;
4、然后去删除主库大于00:00的数据,并执行replace into 更新主库数据。sql脚本较多,写了个脚本一次执行多个sql
#!/bin/bash
MYUSER="User"
MYPASS="Passwd"
HOST="localhost"DBS=`find /tmp/abc -name "*.sql"`
for dbsql in $DBS
do
add=`mysql -udbUser -pdbuser xposp < $dbsql`
done
5、sql执行完了,要对比下每张表的条数,一张张看较多,写了个脚本跑出每张表的条数,然后再做比较。
#!/bin/bash
MYUSER="User"
MYPASS="Passwd"
HOST="localhost"DBS=`mysql -uMYUSER -pMYPASS -Bse "show databases"|grep "database_name"`
for db_name in $DBS
do
tables=`mysql -uMYUSER -pMYPASS -Bse "use $db_name ;show tables"`
for table_name in $tables
do
mysql -uMYUSER -pMYPASS -hlocalhost -e "use $db_name ;select count(*) from $table_name " | sed -n '2p' >/tmp/count.txt
done
done
对比无误后,起MHA集群。