MGR集群命令
MGR集群命令
https://www.modb.pro/db/538741
官方文档:
一. 基本命令
1.检查集群状态,或者叫组复制状态
select * from performance_schema.replication_group_members;
2.关闭节点组复制
stop group_replication;
3.检查vip状态
mysql> system ip add
VIP:172.16.130.183 已经离线
mysql> system ping 172.16.130.183
PING 172.16.130.183 (172.16.130.183) 56(84) bytes of data.
From 172.16.130.85 icmp_seq=10 Destination Host Unreachable
4.查看当前集群哪个是主库,哪个是从库
SELECT
MEMBER_ID,
MEMBER_HOST,
MEMBER_PORT,
MEMBER_STATE,
IF(global_status.VARIABLE_NAME IS NOT NULL,
'PRIMARY',
'SECONDARY') AS MEMBER_ROLE
FROM
performance_schema.replication_group_members
LEFT JOIN
performance_schema.global_status ON global_status.VARIABLE_NAME = 'group_replication_primary_member'
AND global_status.VARIABLE_VALUE = replication_group_members.MEMBER_ID;
也可以使用下面命令来查看主库
SELECT * FROM performance_schema.replication_group_members;
SHOW STATUS LIKE 'group_replication_primary_member';
下面的命令也可以简写为show status like '%primary%';
5.show status和show variabels的区别
https://baijiahao.baidu.com/s?id=1682508664746739254&wfr=spider&for=pc
6.检查集群内的本地通信地址
mysql> SELECT @@group_replication_local_address;
+-----------------------------------+
| @@group_replication_local_address |
+-----------------------------------+
| 10.255.60.123:33062 |
+-----------------------------------+
7.查看GTID_EXECUTED
mysql> SELECT @@GLOBAL.GTID_EXECUTED;
+----------------------------------------------------------------------+
| @@GLOBAL.GTID_EXECUTED |
+----------------------------------------------------------------------+
| 5db40c3c-180c-11e9-afbf-005056ac6820:1-301540478:301748989-301763298 |
+----------------------------------------------------------------------+
还可以用的其他命令
show master status;
show global variables like '%gtid%';
说明:
gtid_executed 表示执行过的GTID集合,每次提交事务时都会更新
gtid_purged 表示已经被清除的GTID集合,并且经常被用在GTID的复制模式下,跳过主从复制错误。binlog会被清除,GTID有时候并不能全部保存,已经清除的GTID集合会记录在gtid_purged参数中,并且gtid_purged是gtid_executed的子集
8.MGR中gtid_executed不连续的问题分析
https://blog.csdn.net/n88Lpo/article/details/124995359
二. 尝试重组mgr
启动 mgr 实例,检查 3 个节点的 gtid 集合。
获取gtid_executed
mysql> SELECT @@GLOBAL.GTID_EXECUTED
获取经过认证的事物集
mysql> SELECT received_transaction_set FROM \
performance_schema.replication_connection_status WHERE \
channel_name="group_replication_applier";
通过对三个节点上的上面两个值比较后,找到最大值的一个节点
1.选择gtid最大节点,执行下面操作
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
select * from performance_schema.replication_group_members;
2.另外两个节点执行下面操作
建议从先从gtid大的启动,数据同步完成后再启动gtid小的,防止网络抖动导致集群故障
start group_replication;
select * from performance_schema.replication_group_members;
3.在线切换主库(可测试用)
SELECT group_replication_set_as_primary('member_uuid');
图中的MEMBER_ID就是member_uuid
三. 数据不一致时处理方法
1.在坏掉的节点上执行下面操作
停止从节点
stop group_replication;
重置,清除节点上的gtid_purged值
reset master
验证下,正常情况下gtid_purged值应该变为空了
show global variables like '%gtid%';
设置和主节点一样的EXECUTED_GTID_SET
#把xxx设置为上的GLOBAL.GTID_EXECUTED,感觉意思是执行过了可以跳过这些数据
set global.gtid_purged='XXXX';
启动复制
start group_replication;
如果不能恢复,需要在最新的数据库节点上拷贝数据,然后复制到其他节点上
2.查看GTID最大的节点
获取gtid_executed
mysql> SELECT @@GLOBAL.GTID_EXECUTED
获取经过认证的事务集
mysql> SELECT received_transaction_set FROM \
performance_schema.replication_connection_status WHERE \
channel_name="group_replication_applier";
通过对三个节点上的上面两个值比较后,找到最大值的一个节点
3.备份GTID最大的数据库,一般为主数据库
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxx' --target-dir=/data/fullbackup
4.登录有故障的mysql集群节点
mysqladmin -uroot -p shutdown
或者
systemctl stop mysqld
5.备份当前数据目录
mv /var/lib/mysql /var/lib/mysql-bak
6.把主数据备份文件拷贝过来,开始恢复数据
xtrabackup --prepare --target-dir=/data/fullbackup
mkdir /var/lib/mysql
xtrabackup --copy-back --target-dir=/data/fullbackup
chown -R mysql:mysql /var/lib/mysql
7.启动mysql
systemctl restart mysqld
systemctl status mysqld
8.登录mysql,加入集群
stop group_replication
reset master
set global gtid_purged='xxx'; #最新的GTID_EXECUTED
start group_replication;
select * from performance_schema.replication_group_members;
努力生活,融于自然
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-06-25 获取kafka的lag, offset, logsize的shell和python脚本