MGR集群命令

发布时间 2023-06-25 10:43:18作者: 坚强的小蚂蚁

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;