前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 5.7 MGR升级成GreatSQL MGR

MySQL 5.7 MGR升级成GreatSQL MGR

作者头像
AsiaYe
发布2022-05-17 10:15:04
7810
发布2022-05-17 10:15:04
举报
文章被收录于专栏:DBA随笔DBA随笔

MySQL 5.7 MGR升级成GreatSQL

开始今天的文章之前,先简单介绍下GreatSQL吧:

  • GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
  • GreatSQL可以作为MySQL或Percona Server的可选替代方案,用于线上生产环境。
  • GreatSQL完全免费并兼容MySQL或Percona Server。

GreatSQL是国产MySQL的一个重要分支,目前主推的是GreatSQL 8.0.25 和 GreatSQL 5.7.36,如果你的生产环境用到了MGR组复制技术,那升级GreatSQL可以提升你的用户体验,因为它在MGR方向做了很多性能改善。

我们线上有一套MGR开发环境,最近从社区MySQL5.7.24版本 升级到了GreatSQL5.7.36版本。目前运行一周,状态良好。这里,我整理了一下从MySQL 5.7社区版本升级到GreatSQL 5.7.36过程中的详细步骤。

01

升级方案

其实,MGR的升级方案比较简单,我们以一个3节点的MGR集群为例,它大致的升级流程如下图:

可以看到,整个过程是逐个节点进行滚动升级的,跟之前MGR版本从5.7升级到8.0是类似的。

MGR 5.7滚动升级MGR 8.0

02

操作步骤

社区版本MySQL MGR升级GreatSQL的MGR操作步骤如下:

  1. 停掉社区版MySQL 5.7.24 MGR集群中的一个MySQL节点,并保存数据目录
  2. 下载GreatSQL 5.7.36软件包,并利用GreatSQL软件包和数据目录直接启动GreatSQL实例
  3. 利用GreatSQL软件包自带的mysql_upgrade工具更新GreatSQL实例的metadata元信息,确保能够兼容MySQL5.7.24版本的数据目录
  4. 将GreatSQL实例加入到MySQL MGR集群中
  5. 校验无误后,重复上述过程,滚动升级社区版MySQL MGR的其他节点。

以下是详细的参考步骤:

1、GreatSQL的软件包下载

软件包下载地址:https://gitee.com/GreatSQL/GreatSQL-Doc#https://gitee.com/GreatSQL/GreatSQL/releases/GreatSQL-5.7.36-39

需要注意的是,如果你下载5.7.36版本,需要注意操作系统要求:

Centos7:GreatSQL-5.7.36-39-Linux-glibc2.17-x86_64.tar.xz

Centos8:GreatSQL-5.7.36-39-Linux-glibc2.28-x86_64.tar.xz

2、线上MGR集群如下:

代码语言:javascript
复制
select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+--------------+-------------+--------------+
| group_replication_applier | 0aefafeb-8352-11e9-897b-6c0b84be0e42 | 10.xx.xxx.xx |        5561 | ONLINE       |
| group_replication_applier | 27f732e0-e2e6-11ea-a18d-fa163ee85021 | 10.xx.xxx.xx |        5561 | ONLINE       |
| group_replication_applier | 49d1de7c-ea06-11eb-a73d-fa163e0815e1 | 10.xx.xxx.xx |        5561 | ONLINE       |
+---------------------------+--------------------------------------+--------------+-------------+--------------+
3 rows in set (0.00 sec)

使用stop group_replication命令,停掉社区版MySQL 5.7.24 MGR集群中的一个MySQL节点,并保存数据目录

3、利用GreatSQL软件包和MySQL数据目录启动GreatSQL实例。

此时配置文件可直接复用社区版MySQL版本的配置文件,过程中如果有报错,可根据报错修改配置文件参数即可,理论上是直接兼容的。

启动命令:

/usr/local/GreatSQL-5.7.36-glibc2.17/bin/mysqld_safe --defaults-file=/data1/mysql5561/my5561.cnf &

4、启动GreatSQL实例之后,执行start group_replication命令,将GreatSQL实例加入到社区版本的MGR组中(因为配置文件沿用了社区版的配置文件,所以可以直接加入),此时在社区版MySQL上查看MGR的组复制状态,可以看到Recovering字样

代码语言:javascript
复制
select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+--------------+-------------+--------------+
| group_replication_applier | 0aefafeb-8352-11e9-897b-6c0b84be0e42 | 10.xx.xx.xxx |        5561 | ONLINE       |
| group_replication_applier | 27f732e0-e2e6-11ea-a18d-fa163ee85021 | 10.xx.xx.xxx |        5561 | ONLINE       |
| group_replication_applier | 49d1de7c-ea06-11eb-a73d-fa163e0815e1 | 10.xx.xx.xxx |        5561 | RECOVERING   |
+---------------------------+--------------------------------------+--------------+-------------+--------------+
3 rows in set (0.01 sec)

说明实例已经进入到组复制的恢复阶段,正在应用重启这段时间内,过程中未执行的事务。

5、在GreatSQL实例中查看MGR状态,可以看到如下报错:

SELECT * FROM performance_schema.replication_group_members\G

ERROR 1682 (HY000): Native table 'performance_schema'.'replication_group_members' has the wrong structure

上述报错,说明GreatSQL软件包启动MySQL数据目录后,metadata元信息有部分不兼容,因此我们需要使用GreatSQL自带的工具mysql_upgrade来对metadata元信息进行升级。

6、利用mysql_upgrade升级metadata元信息

这里,需要重点mysql_upgrade的一个参数:

-s, --upgrade-system-tables

Only upgrade the system tables, do not try to upgrade the data.

upgrade-system-tables默认值是 FALSE,它代表默认情况下,只升级数据,不升级系统表,我们需要将它设置成True,否则升级完成之后,报错还会存在。

元信息升级命令如下:

代码语言:javascript
复制
/usr/local/GreatSQL-5.7.36-glibc2.17/bin/mysql_upgrade -uxxx -pxxx -P5561 -h 10.xx.xx.xxx      
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
....
Upgrade process completed successfully.
Checking if update is needed.

7、重启实例,确保元信息升级后生效。

8、重新使用start group_replication命令加入MGR集群,并在GreatSQL上查看当前的组复制状态:

代码语言:javascript
复制
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST  | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+
| group_replication_applier | 0aefafeb-8352-11e9-897b-6c0b84be0e42 | 10.xx.xx.xxx |        5561 | ONLINE       | PRIMARY     |
| group_replication_applier | 27f732e0-e2e6-11ea-a18d-fa163ee85021 | 10.xx.xx.xxx |        5561 | ONLINE       | PRIMARY     |
| group_replication_applier | 49d1de7c-ea06-11eb-a73d-fa163e0815e1 | 10.xx.xx.xxx |        5561 | ONLINE       | PRIMARY     |
+---------------------------+--------------------------------------+--------------+-------------+--------------+-------------+
3 rows in set (0.00 sec)

可以观察到一个细节,在社区版MySQL上查看MGR的组复制状态

只有5个字段,而在GreatSQL上查看MGR的组复制状态,有6个字段,多了个member_role字段,也就是成员角色字段。

其实,这跟MGR元信息表的字段数有关,在社区版本5.7上,本身这个表只有5个字段,官方文档地址如下:

https://dev.mysql.com/doc/refman/5.7/en/performance-schema-replication-group-members-table.html

GreatSQL对这个表做了改进,增加了member_role字段。

03

总结

社区版MySQL MGR集群升级GreatSQL集群的过程,相对平滑,但是升级过程中需要注意几个事项:

1、GreatSQL的版本和操作系统版本需要对应,否则安装过程中可能会遇到某些依赖包不存在的问题。遇到这种问题,可以去GreatSQL项目的ReadMe里面去找版本和安装包的匹配信息,或者查找对应的依赖包。

2、GreatSQL启动MySQL的数据目录之后,需要使用mysql_upgrade升级一次metadata元信息,否则加入组之后,无法查看当前的集群状态,另外升级过程中,需要指定update-system-table参数。

3、单纯对于MGR集群来说,最好使用8.0版本的MGR集群,可以避免一些坑。GreatSQL也推荐使用最新的8.0.25版本。如果你的集群是MySQL社区版5.7的MGR,可以先升级成GreatSQL的5.7版本的MGR,然后升级成GreatSQL的8.0.25的MGR

今天内容就到这里吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL 5.7 MGR升级成GreatSQL
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档