在实际生产中,用户可能因为数据库账号权限没有把控好,使得用户在从库上进行了相关的误操作,使得主从数据不一致,影响数据主从复制功能以及为后续的故障带来一定影响!因此如何在故障出现后,去手动补齐数据库集群的gtid一致性具有重要意义!
使用说明:每个故障场景都有所不同,请使用该文档时,结合自己环境情况,确定问题后再决定是否需要施行该解决方案
A、确认GTID情况
查找三个实例的GTID:
show global variables like '%gtid%';
发现两个从库分别多了3个GTID
为: af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1-3、f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1-3
具体三台机器GTID为:(M为主,S为从,从库标粗的GTID部分是比主库多的GTID)
M102 6d042b55-a42a-11e8-8996-6c92bf5d2238:1-1869838
S104 6d042b55-a42a-11e8-8996-6c92bf5d2238:1-1869838, af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1-3
S106 6d042b55-a42a-11e8-8996-6c92bf5d2238:1-1869838, f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1-3
B、修复目标
目标是三台都变成如下GTID:6d042b55-a42a-11e8-8996-6c92bf5d2238:1-1869838, af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1-3, f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1-3
即主库102增加:
af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1-3, f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1-3
从库104增加:
f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1-3
从库106增加:
af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1-3
C、修复过程
修复过程建议:先修复从库,最后修复主库,稳妥起见,每次插入一个空事务,都要查看GTID,防止插入失败
修复104从数据库:
关session binlog:
set sql_log_bin=OFF;
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:2';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:3';
begin;
commit;
set gtid_next=AUTOMATIC;
show global variables like '%gtid%';
修复106从数据库:
关session binlog:
set sql_log_bin=OFF
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:2';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:3';
begin;
commit;
set gtid_next=AUTOMATIC;
show global variables like '%gtid%';
修复102主数据库:
关session binlog:
set sql_log_bin=OFF
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:1';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:2';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='af8b9e4d-a42a-11e8-800d-6c92bf5d2666:3';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:1';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:2';
begin;
commit;
show global variables like '%gtid%';
set gtid_next='f6e55da4-a42a-11e8-925b-6c92bf5d12e0:3';
begin;
commit;
set gtid_next=AUTOMATIC;
show global variables like '%gtid%';