MHA集群故障数据修复全过程

起因: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集群。

你可能感兴趣的:(『,数据库知识,』)