乐趣区

关于升级:技术分享-MGR-单主模式组内滚动升级

作者:李鹏博

爱可生 DBA 团队成员,次要负责 MySQL 故障解决和 SQL 审核优化。对技术执着,为客户负责。

本文起源:原创投稿

* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


MySQL 从 5.7 开始反对 MGR,并一直地进行改良与欠缺,比方从 8.0.14 新增了 group_replication_consistency 参数用于配置集群一致性;从 8.0.16 新增 group_replication_consistency 参数来反对 auto-rejoin 性能,从 8.0.17 开始反对 clone 插件并用于 MGR 的分布式复原。本文将介绍如何从 MySQL 5.7.25 单主模式的 MGR 组内滚动降级到 MySQL 8.0.26。

MGR 能够离线降级,也能够在线降级,咱们通常都会抉择在线降级。而在线降级官网提供了 3 种形式:组内滚动降级、滚动迁徙降级、滚动反复降级。咱们这里应用最简略疾速的组内滚动降级形式。

组内滚动降级的形式就是在一个 MGR 组内,其中的每个实例都顺次从组中删除、降级,而后重新加入组中。这种形式比拟适宜单主模式。而对于多主模式下的组,因为在组内滚动降级期间主节点的数量会缩小,从而会导致写可用性升高,这是因为如果一个成员退出一个组时,它运行的 MySQL 服务器版本高于现有组成员运行的最低版本,它会主动放弃只读模式 (super_read_only=ON),从 MySQL 8.0.17 开始,当所有成员都降级到雷同的版本时,它们都会主动更改回读写模式;而对于之前的版本,则须要在每个成员上手动设置 super_read_only=OFF 来将实例改回读写模式。

以下将大抵介绍降级的步骤:

一. 确定 MGR 模式和版本

1. 确认 MGR 模式

show variables like '%group_replication_single_primary_mode%';

2. 确认主节点

select * from performance_schema.replication_group_members;

SHOW STATUS LIKE 'group_replication_primary_member';

3. 确认节点数据库版本

MySQL 5.7 须要每个独自确认

select @@version;

留神:后面的 1. 2. 3. 步骤在 MySQL 8 外面可只通过一条语句确认:

select * from performance_schema.replication_group_members;

二. 备份数据库

降级之前必须要对数据库进行全备,以便用于降级失败后的回退。

三. 降级第一个从节点

1. 装置 mysql shell

下载地址:https://dev.mysql.com/downloa…

rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-shell

2. 查看兼容性并修复不兼容的中央

mysqlsh -- util check-for-server-upgrade {--user=root --socket=/opt/mysql/data/3307/mysqld.sock} --target-version=8.0.26 --output-format=JSON --config-path=/opt/mysql/etc/3307/my.cnf

3. 进行组复制

stop group_replication;

4. 敞开数据库

SET GLOBAL innodb_fast_shutdown=0;
systemctl stop mysqld_3306

5. 装置新版本 MySQL

tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz -C /opt/mysql/base/

删除原 base 门路目录或软连贯:

rm -rf /opt/mysql/base/5.7.25/

ln -s mysql-8.0.26-linux-glibc2.12-x86_64/ /opt/mysql/base/5.7.25

6. 应用 –upgrade=auto 启动数据库进行降级

/opt/mysql/base/5.7.25/bin/mysqld --defaults-file=/opt/mysql/etc/3306/my.cnf --daemonize --pid-file=/opt/mysql/data/3306/mysqld.pid --user=actiontech-mysql --socket=/opt/mysql/data/3306/mysqld.sock --port=3306 --upgrade=auto

留神:

降级实现后不必再进行重启

降级实现之后,当前再启动不须要再应用 –upgrade=auto 参数

3.7. 节点手动退出集群并开启组复制

RESET SLAVE ALL;

set global group_replication_group_name="964fe9c5-03e4-11ec-8aa2-02000aba4034";

SET GLOBAL group_replication_local_address = "10.186.64.71:33061";

SET GLOBAL group_replication_group_seeds = "10.186.64.52:33061";

SET GLOBAL group_replication_bootstrap_group = OFF;

CHANGE MASTER TO MASTER_USER="repl",MASTER_PASSWORD="repl" FOR CHANNEL "group_replication_recovery";

START GROUP_REPLICATION;

select * from performance_schema.replication_group_members;

四. 以上述形式降级

五. 降级主节点

降级形式同降级从节点,

须要留神的是执行 ”stop group_replication;” 之后,主节点会主动进行切换,要确认新的主节点的地位

留神批改:

SET GLOBAL group_replication_local_address = "10.186.64.71:33061";

SET GLOBAL group_replication_group_seeds = "10.186.64.52:33061";

六. 批改主节点主机

如果要将主节点批改回原主节点地址:

指定原主的 server uuid(MEMBER ID)并切换

SELECT group_replication_set_as_primary('ab8900ff-03e4-11ec-b68a-02000aba4034');

七. 降级通信协议

MGR 降级之后,通信协议仍旧是老版本的通信协议,不会主动降级

1. 确认以后的老版本通信协议版本

SELECT group_replication_get_communication_protocol();

2. 降级到目前 MGR 新版本的通信协议

SELECT group_replication_set_communication_protocol("8.0.26");

3. 确认降级后的通信协议版本

SELECT group_replication_get_communication_protocol();

退出移动版