运行环境

linuxCentOS release 6.8 (Final)

kernel:2.6.32-642.6.2.el6.x86_64

mysql Server version: 5.7.21-20-log Percona Server (GPL),MGR单主模式

1.故障现象

解析binlog

mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000042 --include-gtids='1bb1b861-f776-11e6-3319-010204058070:113111655'

1bb1b861-f776-11e6-3319-010204058070:113111655 该GTID的binlog内容 ycc01 与ycc03服务器内容一致

  

ycc01.prod.bj2 mysql_3319

SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111655'/*!*/;
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number
# at
# :: server id end_log_pos Delete_rows: table id flags: STMT_END_F
### DELETE FROM `ycc_cfcenter`.`config_center_client_list`
### WHERE
### @=
### @=
### @='10.1.97.131'
### @=''
### @=
# at
# :: server id end_log_pos Xid =
COMMIT/*!*/; ycc03.prod.bj2 mysql_3319 SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111655'/*!*/;
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number
# at
# :: server id end_log_pos Delete_rows: table id flags: STMT_END_F
### DELETE FROM `ycc_cfcenter`.`config_center_client_list`
### WHERE
### @=
### @=
### @='10.1.97.131'
### @=''
### @=
# at
# :: server id end_log_pos Xid =
COMMIT/*!*/;
 

mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000042 --include-gtids='1bb1b861-f776-11e6-3319-010204058070:113111656'

1bb1b861-f776-11e6-3319-010204058070:113111656 该GTID的binlog内容 ycc01 与ycc03服务器内容不一致

ycc01.db.prod.bj2 mysql_3319

SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111656'/*!*/;
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number
# at
# :: server id end_log_pos Delete_rows: table id flags: STMT_END_F
### DELETE FROM `ycc_cfcenter`.`config_center_client_list`
### WHERE
### @=
### @=
### @='10.1.94.137'
### @=''
### @=
# at
# :: server id end_log_pos Xid =
COMMIT/*!*/; ycc03.db.prod.bj2 mysql_3319
SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111656'/*!*/;
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number
# at
# :: server id end_log_pos Write_rows: table id flags: STMT_END_F
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
### @=
### @=
### @='10.1.97.131'
### @=''
### @=
# at
# :: server id end_log_pos Xid =
COMMIT/*!*/;

2.原因排查

官方已经反馈社区版MySQL 5.7.26和MySQL 8.0.16 中会修复,如果是企业版客户可以申请最新的hotfix版本。

在未升级 MySQL 版本前,若再发生此类故障,在修复时需要人工检查,检查切换时binlog中 GTID 信息与新主节点对应 GTID 的信息是否一致

如果不一致需要人工修复至一致状态,一致才可以将被踢出的原主节点加回集群。

参考文档

https://mp.weixin.qq.com/s/WuYRp2DU2uRq0vN-b29PPA?client=tim&ADUIN=190100183&ADSESSION=1555029984&ADTAG=CLIENT.QQ.5603_.0&ADPUBNO=26882

3.修复过程

3.1 确定故障点

查看故障节点error.log

error.log
2019-04-12T12:41:45.834694+08:00 3561943 [ERROR] Slave SQL for channel 'group_replication_applier': Could not execute Write_rows event on table ycc_cfcenter.config_center_client_list; Duplicate entry '1
36-10.1.94.137-5566' for key 'uniq_idx_project_id', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log FIRST, end_log_pos 327, Error_code: 1062
2019-04-12T12:41:45.834713+08:00 3561943 [Warning] Slave: Duplicate entry '136-10.1.94.137-5566' for key 'uniq_idx_project_id' Error_code: 1062

查看故障节点当前GTID

故障节点当前GTID
SHOW MASTER STATUS
FILE               POSITION  Binlog_Do_DB  Binlog_Ignore_DB  Executed_Gtid_Set                                
----------------  ---------  ------------  ----------------  --------------------------------------------------
mysql-bin.000042  747898223                                  1bb1b861-f776-11e6-3319-010204058070:1-113111661

解析故障节点包含【1bb1b861-f776-11e6-3319-010204058070:1-113111661】 GTID 的binlog 
##mysqlbinlog -vvv relay-bin-group_replication_applier.000053 --include-gtids="1bb1b861-f776-11e6-3319-010204058070:113111661"

故障节点binlog解析
SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111661'/*!*/;
# at 703004277
#190412 12:41:45 server id 58070  end_log_pos 81        Query   thread_id=4163376       exec_time=0     error_code=0
SET TIMESTAMP=1555044105/*!*/;
BEGIN
/*!*/;
# at 703004358
#190412 12:41:45 server id 58070  end_log_pos 161       Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number 108
# at 703004438
#190412 12:41:45 server id 58070  end_log_pos 327       Write_rows: table id 108 flags: STMT_END_F
 
BINLOG '
'/*!*/;
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183781 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=206 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.97.133' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183788 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=136 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.94.137' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183795 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=206 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.97.131' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
# at 703004604
#190412 12:41:45 server id 58070  end_log_pos 354       Xid = 604665142
COMMIT/*!*/;

解析主节点binlog 确定相同内容binlog event 对应的GTID值 
##mysqlbinlog -vvv mysql-bin.000042 --include-gtids="1bb1b861-f776-11e6-3319-010204058070:113111660-113111665'

主库binlog解析
SET @@SESSION.GTID_NEXT= '1bb1b861-f776-11e6-3319-010204058070:113111662'/*!*/;
# at 418536376
#190412 12:41:45 server id 58070  end_log_pos 418536457         Query   thread_id=4163376       exec_time=0     error_code=0
SET TIMESTAMP=1555044105/*!*/;
BEGIN
/*!*/;
# at 418536457
#190412 12:41:45 server id 58070  end_log_pos 418536537         Table_map: `ycc_cfcenter`.`config_center_client_list` mapped to number 108
# at 418536537
#190412 12:41:45 server id 58070  end_log_pos 418536703         Write_rows: table id 108 flags: STMT_END_F
 
BINLOG '
'/*!*/;
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183781 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=206 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.97.133' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183788 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=136 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.94.137' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
### INSERT INTO `ycc_cfcenter`.`config_center_client_list`
### SET
###   @1=380183795 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=206 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @3='10.1.97.131' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
###   @4='5566' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
###   @5=1555044105821 /* LONGINT meta=0 nullable=1 is_null=0 */
# at 418536703
#190412 12:41:45 server id 58070  end_log_pos 418536730         Xid = 604665142
COMMIT/*!*/;

3.2 确定故障点结果汇总

1.故障节点提示 Duplicate entry '136-10.1.94.137-5566' for key 'uniq_idx_project_id'  有唯一约束冲突

2.故障节点当前GTID  【1bb1b861-f776-11e6-3319-010204058070:1-113111660】

3.故障节点与主节点GTID相差一个值,相同binlog event 主节点GTID【1bb1b861-f776-11e6-3319-010204058070:113111662】  故障节点【1bb1b861-f776-11e6-3319-010204058070:113111661】

3.3 故障节点修复过程

3.3.1 停止故障节点MGR服务
    STOP group_replication;
    SET GLOBAL super_read_only=0
3.3.2 删除冲突键数据
    DELETE FROM config_center_client_list WHERE project_id=136 AND client_ip='10.1.94.137' AND PORT=5566
3.3.3 清除故障节点GTID信息
    RESET MASTER 
3.3.4 重置故障节点GTID信息,故障节点因唯一约束冲突未重做的binlog event,在主节点对应的GTID为【1bb1b861-f776-11e6-3319-010204058070:113111662】。
    SET @@GLOBAL.GTID_PURGED='1bb1b861-f776-11e6-3319-010204058070:1-113111661';
    START group_replication;
    SHOW MASTER STATUS

3.3.5 在故障节点执行, 需要跳过的GTID只有一个,也可以用以下方法,这样就不需要reset masert。

STOP group_replication;
SET GLOBAL super_read_only=0
set sql_log_bin=0
DELETE FROM config_center_client_list WHERE project_id=136 AND client_ip='10.1.94.137' AND PORT=5566
set sql_log_bin=1
set session gtid_next="1bb1b861-f776-11e6-3319-010204058070:113111661"; 
begin;commit; 
set session gtid_next="AUTOMATIC"; 
START group_replication;

MGR主从不一致问题排查与修复的更多相关文章

  1. pt-table-sync修复mysql主从不一致的数据

    pt-table-sync简介 顾名思义,它用来修复多个实例之间数据的不一致.它可以让主从的数据修复到最终一致,也可以使通过应用双写或多写的多个不相关的数据库实例修复到一致.同时它还内部集成了pt-t ...

  2. pt-table-sync 配合pt-table-checksum 修复主从不一致

    pt-table-sync 配合pt-table-checksum 修复主从不一致. 先执行下面这条语句,打印出要执行的命令,确认无误后再将  --print  改为  --execute 执行.注意 ...

  3. MySQL主从不一致修复

    场景: 线上正在服务的库由于紧急主从切换导致主从不一致,报错信息如下: Last_Error: Coordinator stopped because there were error(s) in t ...

  4. Linux 系统故障排查和修复技巧

    Linux 系统故障排查和修复技巧 我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式.GRUB命令操作.Linux救援模式的故障修复案例帮助大家了解 ...

  5. MySQL主从不一致的几种故障总结分析、解决和预防

    (1).主从不一致故障,从库宕机,从库启动后重复写入数据报错解决与预防:relay_log_info_repository=TABLE(InnoDB)参数解释说明:若relay_log_info_re ...

  6. redis 数据库主从不一致问题解决方案

     在聊数据库与缓存一致性问题之前,先聊聊数据库主库与从库的一致性问题. 问:常见的数据库集群架构如何? 答:一主多从,主从同步,读写分离. 如上图: (1)一个主库提供写服务 (2)多个从库提供读服务 ...

  7. Linux启动故障排查和修复技巧

    一个执着于技术的公众号 我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应对单用户模式.GRUB命令操作.Linux救援模式的故障修复案例帮助大家了解此类问题的解 ...

  8. mysql主从不一致解决方法

    方法一:忽略错误后,继续同步 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 stop slave; #表示跳过一步错误,后面的数字可变 set global ...

  9. Linux系统故障排查和修复技巧

    本文转自:http://os.51cto.com/art/201304/388384.htm 我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式.GR ...

随机推荐

  1. android recovery升级过程中掉电处理

    一般在升级过程,都会提示用户,请勿断电,不管是android的STB,TV还是PHONE,或者是其他的终端设备,升级过程,基本上都可以看到“正在升级,请勿断电”,然后有个进度条,显示升级的进度. 但是 ...

  2. NoSQL&Redis

    1.介绍NoSQL NoSQL(Not Only SQL):不仅仅是SQL,是一项全新的数据库理念,泛指非关系型数据库,原来我们所使用的MySQL.Oracle.Microsoft SQL Serve ...

  3. WebDriverTest

    using OpenQA.Selenium.Firefox; using System; using System.Collections.Generic; using System.Linq; us ...

  4. linux调度器源码分析 - 概述(一)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新.本系列文章通 ...

  5. linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$

    解决办法: 其实就是普通用户的家目录缺少配置文件导致: [root@xxx ~]# su - oldboy -bash-4.1$ 原因是普通用户的家目录下缺少文件: [root@xxx ~]# ls ...

  6. 基础数据类型之AbstractStringBuilder

    String内部是一个private final char value[]; 也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然.... 所以,对于可变字符序列的需求是很明确的 ...

  7. PostgreSQL9.6+PostGIS2.3学习笔记(一)导入shp文件

    一. 建库以及准备工作:(使用pgAdmin4直接建库) 打开pgAdmin4,如下图所示create–>Database 输入database的名字,如下图,输入完成即可选择save进行保存. ...

  8. jQuery的收尾

    一  后台管理布局增删改 二  常用事件 三  jQuery扩展 一  后台管理布局增删改(多种方法) <!DOCTYPE html> <!-- saved from url=(00 ...

  9. 2018-2019-2 网络对抗技术 20165318 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165318 Exp3 免杀原理与实践 免杀原理及基础问题回答 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...

  10. [SDOI2010]捉迷藏

    嘟嘟嘟 k-d tree板儿题. 建完树后对每一个点求一遍最小和最大曼哈顿距离,是曼哈顿,不是欧几里得. #include<cstdio> #include<iostream> ...