MySQL-MGR报错MY-011526

问题背景:

        单主MGR集群,主节点在服务器意外重启之后,无法重新加入现有MGR集群,报错误[MY-011526] [Repl] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: 

问题分析:

        原本MGR集群为3节点的单主集群,主节点为192.168.1.100

select * from replication_group_members;
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 355ae888-2eba-11ee-baeb-000c2986fd67 | 192.168.1.201 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
| group_replication_applier | 66d57e9a-2eb9-11ee-b56a-000c290bcc56 | 192.168.1.100 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 6c695395-2eb9-11ee-8cbc-000c29186152 | 192.168.1.200 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+

        MGR集群在服务器意外重启之后,主节点切换为192.168.1.201

select * from replication_group_members;
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 355ae888-2eba-11ee-baeb-000c2986fd67 | 192.168.1.201 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 6c695395-2eb9-11ee-8cbc-000c29186152 | 192.168.1.200 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+

        查看报错的信息,可以看到节点无法加入的原因为本地的GTID大于MGR集群的GTID,本地实例的server_uuid为:66d57e9a-2eb9-11ee-b56a-000c290bcc56,MGR集群的group_replication_group_name为:1db95f8f-5ba5-11ea-ace5-000c29a9919b

        所以这里存在问题的GTID为节点自己server_uuid的GTID:66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-12比MGR集群GTID:66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-11大

[MY-011526] [Repl] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. 
Local transactions: 1db95f8f-5ba5-11ea-ace5-000c29a9919b:1-28, 
38c1dc4f-2ebb-11ee-8e75-000c290bcc56:1-5, 
66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-12 
> 
Group transactions: 1db95f8f-5ba5-11ea-ace5-000c29a9919b:1-29, 
38c1dc4f-2ebb-11ee-8e75-000c290bcc56:1-5, 
66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-11'

        正常MGR集群的从节点会被设置为super_read_only超级自读,主节点的GTID只更新group_replication_group_name的GTID:1db95f8f-5ba5-11ea-ace5-000c29a9919b,节点自己的server_uuid不会更新,除非当前节点已经被剔除或者不是主节点并且人为关闭只读去执行了操作,才会导致节点自己的server_uuid发生更新

        通过查看当前的进程列表发现存在应用的连接会话,与应用进一步沟通确认,由于应用的程序无法识别MGR集群的主节点切换也没有通过中间件代理类似MySQL Router去访问MGR集群,导致MGR集群发生了主节点切换,应用依然还是访问旧的主节点,旧节点被写入数据,导致旧节点的本地GTID发生了更新

root@mysql.sock 18:36:  [(none)]>show processlist;
+----+-----------------+---------------------+------+---------+------+------------------------+------------------+
| Id | User            | Host                | db   | Command | Time | State                  | Info             |
+----+-----------------+---------------------+------+---------+------+------------------------+------------------+
|  6 | event_scheduler | localhost           | NULL | Daemon  | 2428 | Waiting on empty queue | NULL             |
| 46 | root            | localhost           | NULL | Query   |    0 | init                   | show processlist |
| 83 | app_user        | 192.168.2.10:36068  | NULL | Sleep   |    3 |                        | NULL             |
+----+-----------------+---------------------+------+---------+------+------------------------+------------------+

问题修复:

        1 跟应用一起确认以哪个节点为主节点,然后以该节点为主节点重建MGR集群,由于切换后应用写入的还是旧主节点192.168.1.100,所以以192.168.1.100为主节点

        2 获取MGR集群与旧主节点的差异数据,如果有差异数据,需要将数据交给应用去分析是否回插入旧主节点192.168.1.100

--根据旧主节点的gtid进行过滤,获取差异数据
mysqlbinlog -vv --base64-output=decode-rows --executed-gtids='1db95f8f-5ba5-11ea-ace5-000c29a9919b:1-28, 
38c1dc4f-2ebb-11ee-8e75-000c290bcc56:1-5, 
66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-12' /opt/mysql/log/binlog.000001 > /tmp/binlog_1_gtid.sql;

        3 对每个节点数据进行备份,然后以节点192.168.1.100为主节点开始重建MGR集群

mysqldump -uroot -p -S  /tmp/mysql.sock --master-data=2 --single-transaction -A --events --triggers --routines --default-character-set=utf8  > mysqlall.sql

        4 全部节点停止MGR组复制

stop group_replication;

        5 在主节点192.168.1.100引导初始化MGR组,作为主节点

set global group_replication_bootstrap_group=on;
start group_replication;
​
root@mysql.sock 21:07:  [test2]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 66d57e9a-2eb9-11ee-b56a-000c290bcc56 | 192.168.1.100 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
1 row in set (0.00 sec)
​
root@mysql.sock 21:07:  [test2]>

        重建方式一:通过修改从节点gtid的方式直接重建MGR集群,主从节点可能存在数据差异

修改从节点192.168.1.200/201的GTID,重新加入集群

--手动设置从节点的gtid,确保从节点的gtid再新MGR集群的范围以内
---group_replication_group_name的GTID设置为主节点的初始gtid值
---主节点server_uuid保持原值
reset master;
set global gtid_purged='1db95f8f-5ba5-11ea-ace5-000c29a9919b:1-28,38c1dc4f-2ebb-11ee-8e75-000c290bcc56:1-5,66d57e9a-2eb9-11ee-b56a-000c290bcc56:1-11';
--加入MGR集群
start group_replication;

        MGR集群重建完成

​​root@mysql.sock 21:20:  [test2]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 355ae888-2eba-11ee-baeb-000c2986fd67 | 192.168.1.201 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
| group_replication_applier | 66d57e9a-2eb9-11ee-b56a-000c290bcc56 | 192.168.1.100 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 6c695395-2eb9-11ee-8cbc-000c29186152 | 192.168.1.200 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
3 rows in set (0.00 sec)

        重建方式二:通过克隆方式重建两个从节点,主从节点数据完成一致,需要数据库版本8.0.17+

主从节点检查克隆插件

--确认安装了克隆插件
root@mysql.sock 21:21:  [test2]>SELECT PLUGIN_NAME, PLUGIN_STATUS        FROM INFORMATION_SCHEMA.PLUGINS        WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone       | ACTIVE        |
+-------------+---------------+
--安装克隆插件
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

        从节点依次执行克隆操作

--配置克隆源端,为主节点
SET GLOBAL clone_valid_donor_list = '192.168.1.100:3306';
--执行克隆
CLONE INSTANCE FROM 'rpl_user'@'192.168.1.100':3306 IDENTIFIED BY '123456';
--查看克隆进度,会先删除数据,再进行拷贝
root@mysql.sock 21:38:  [(none)]>SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    29
Current database: *** NONE ***
​
+-----------+-----------+----------------------------+
| STAGE     | STATE     | END_TIME                   |
+-----------+-----------+----------------------------+
| DROP DATA | Completed | 2023-08-05 21:36:20.706373 |
| FILE COPY | Completed | 2023-08-05 21:37:56.385411 |
| PAGE COPY | Completed | 2023-08-05 21:37:56.798611 |
| REDO COPY | Completed | 2023-08-05 21:37:57.106462 |
| FILE SYNC | Completed | 2023-08-05 21:38:16.364659 |
| RESTART   | Completed | 2023-08-05 21:38:20.678312 |
| RECOVERY  | Completed | 2023-08-05 21:38:22.450064 |
+-----------+-----------+----------------------------+
7 rows in set (0.01 sec)
​
root@mysql.sock 21:39:  [(none)]>
--克隆完成之后,从节点会自己加入集群
root@mysql.sock 21:40:  [(none)]>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 66d57e9a-2eb9-11ee-b56a-000c290bcc56 | 192.168.1.100 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 6c695395-2eb9-11ee-8cbc-000c29186152 | 192.168.1.200 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
2 rows in set (0.00 sec)
​
root@mysql.sock 21:40:  [(none)]>

        MGR集群重建完成

root@mysql.sock 21:43:  [(none)]>select * from performance_schema.replication_group_members;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    29
Current database: *** NONE ***
​
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST   | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 355ae888-2eba-11ee-baeb-000c2986fd67 | 192.168.1.201 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
| group_replication_applier | 66d57e9a-2eb9-11ee-b56a-000c290bcc56 | 192.168.1.100 |        3306 | ONLINE       | PRIMARY     | 8.0.22         |
| group_replication_applier | 6c695395-2eb9-11ee-8cbc-000c29186152 | 192.168.1.200 |        3306 | ONLINE       | SECONDARY   | 8.0.22         |
+---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+
3 rows in set (0.01 sec)
​
root@mysql.sock 21:48:  [(none)]>

        重建方式三:通过手动备份的方式mysqldump,xtrabackup重建

        备份主节点的数据

mysqldump -uroot -p -S  /tmp/mysql.sock --master-data=2 --single-transaction -A --events --triggers --routines --default-character-set=utf8  > mysqlall.sql

        恢复两个从节点的数据

--清空恢复从节点的gtid信息以及binlog
reset master
--使用主节点的备份恢复数据
source mysqlall.sql

        将从节点加入MGR集群,完成重建MGR

start group_replication;

        重建MGR完成之后,关闭主节点的引导参数

set global group_replication_bootstrap_group=off;

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年度漏洞预警

1 漏洞 漏洞是硬件,软件,协议的具体实现或系统安全策略上存在的缺陷。从而可以使用攻击者能够在破坏系统。 2 漏洞汇总数据 以下数据针对 23 年截至8月期间爆发的高危严重漏洞进行了数据统计和分析, 具体的数据如下所示: 漏洞…

Camx--概述

该部分代码主要位于 vendor/qcom/proprietary/ 目录下: 其中 camx 代表了通用功能性接口的代码实现集合(CamX),chi-cdk代表了可定制化需求的代码实现集合(CHI),从图中可以看出Camx部分对上作为H…

v3s平台学习

printf 应用程序 arm-linux-gnueabihf-gcc test.c 复制a.out 到 sd卡 /media/shen/rootfs/root 运行a.out 不显示 解决方法 https://blog.csdn.net/whatday/article/details/85137031/?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~def…

Linux 性能分析之iostat命令详解

Linux 性能分析之iostat命令详解 iostat命令是IO性能分析的常用工具,其是input/output statistics的缩写。本文将着重于下面几个方面介绍iostat命令: iostat的安装iostat命令行选项说明iostat输出内容分析如何确定磁盘IO的瓶颈iostat实际案例 命令的安…

django boostrap html实现可拖拽的左右布局,鼠标拖动调整左右布局的大小或占比

一、实现的效果 最近需要在Django项目中,实现一个左右布局的html页面,页面框架使用的是boostrap。但这个布局不是简单的左右分栏布局,而是需要实现可以通过鼠标拖拽的方式动态调整左右两侧布局的大小和占比。效果大致如下: 一开始,页面分为左右两块布局: 鼠标放到中间的…

Python脚本之连接MySQL【四】

本文为博主原创,未经授权,严禁转载及使用。 本文链接:https://blog.csdn.net/zyooooxie/article/details/124640412 之前写了篇 Python脚本之连接MySQL【三】,日常使用过程中,代码实际有很多改动,特此更新…

阿里云SMS,APi接口返回错误码

API错误码 更新时间:2023-06-29 16:33提交缺陷 产品详情 相关技术圈 我的收藏 调用API接口失败时,会返回错误码。本文档为您提供API接口错误码列表,请根据错误码和对应错误信息排查问题。 错误码(Code) 错误信息…

【先进PID控制算法(ADRC,TD,ESO)加入永磁同步电机发电控制仿真模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

EJB基本概念和使用

一、EJB是什么? EJB是sun的JavaEE服务器端组件模型,是一种规范,设计目标与核心应用是部署分布式应用程序。EJB2.0过于复杂,EJB3.0的推出减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)…

如何使用Flask-RESTPlus构建强大的API

如何使用Flask-RESTPlus构建强大的API 引言: 在Web开发中,构建API(应用程序接口)是非常常见和重要的。API是一种允许不同应用程序之间交互的方式,它定义了如何请求和响应数据的规范。Flask-RESTPlus是一个基于Flask的…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续…

微信小程序data-item设置获取不到数据的问题

微信小程序data-item设置获取不到数据的问题 简单说明: 在微信小程序中,通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem,再通过data-item绑定数据。 **问题:**通过data-i…

观察者模式实战

场景 假设创建订单后需要发短信、发邮件等其它的操作,放在业务逻辑会使代码非常臃肿,可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听,创建订单 假设后面还需要做其它的…

常见的一些BUG

常见的一些BUG,但实际上在编写代码时,我们应该尽可能避免这些类型的错误: 变量名与函数名冲突: def main(): print("Hello, World!") main 5 print("The value of main is:", main) 函数参数传递错误&…

取个对象值导致系统崩溃

取个对象值导致系统崩溃 前言 想必各位小伙经常在项目中遇到一些错误,取对象值的时候,经常报错,又或者某些项目突然就挂经常都是出现在一些对象取值上面,然后就被领导一顿训斥 报错分析 例如: 下面这个报错大家想必不会陌生&am…

最大交换(力扣)枚举 JAVA

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是 [0, 10^8] 解题思路: 1、数最…

【量化课程】08_2.深度学习量化策略基础实战

文章目录 1. 深度学习简介2. 常用深度学习模型架构2.1 LSTM 介绍2.2 LSTM在股票预测中的应用 3. 模块分类3.1 卷积层3.2 池化层3.3 全连接层3.4 Dropout层 4. 深度学习模型构建5. 策略实现 1. 深度学习简介 深度学习是模拟人脑进行分析学习的神经网络。 2. 常用深度学习模型架…

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

在直播软件源码平台中,服务器扮演着重要的角色,关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展,直播行业也随之崛起,全世界的人们都加入到了直播软件源码平台中,用户流量的增加让服务器的…

视频高效剪辑,轻松平均分割视频,生成高质量M3U8

您是否在处理视频剪辑时常常面临繁琐的切分工作?是否希望能够快速而精准地平均分割视频,并生成适用于在线播放的高质量m3u8文件?现在,我们的智能视频剪辑大师为您提供了一种简便而高效的解决方案!无需复杂操作&#xf…

Leaflet入门,Leaflet如何实现vue双向绑定数据添加到图片标记物到地图上,动态根据vue数据更新到地图上以及鼠标经过标记物显示提示框

前言 本章使用Leaflet的vue2-leaflet或者vue-leaflet插件方式实现vue数据绑定地图数据,实现地图标记物与vue数据的双向联动更新,以及鼠标经过标记物显示提示框功能。 实现效果演示 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定…