“滚动升级”意味着在升级过程中无需关闭整个集群,不影响业务。
跨版本升级(从5.6到5.7版本)和小版本升级(从5.7.x到5.7.y)都可以这样做。
不支持从早于5.6的版本升级到5.7。因此,如果您运行的是Percona XtraDB集群版本5.5,建议关闭所有节点,然后从头删除并重新创建群集。或者,您可以执行从PXC 5.5到5.6的滚动升级,然后从5.6至5.7的滚动升级。
一 试验环境
![315c419268ed0d28462288be5dbced9a.png](https://img-blog.csdnimg.cn/img_convert/315c419268ed0d28462288be5dbced9a.png)
二 试验步骤
2.1 升级第一个节点
2.1.1 确保所有节点已同步(synchronized)
在每个节点上执行:
mysql> show status like 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
2.1.2 停止mysql服务
service mysql stop
在其他节点上插入两条数据,看升级完毕后数据库是否会同步到该节点上。
2.1.3 卸载已经存在的Percona XtraDB Cluster and Percona XtraBackup packages, 然后安装Percona XtraDB Cluster version 5.7 packages
yum remove percona-xtrabackup* Percona-XtraDB-Cluster* -y
/*
如果卸载的时候报错:
No Match for argument: Percona-XtraDB-Cluster-5.7.28-rel31-31.41.1.Linux.x86_64.ssl101.tar.gz
可尝试一个个remove,示例:
[root@pc1 download]# rpm -qa | grep Per
Percona-XtraDB-Cluster-client-56-5.6.46-28.38.1.el6.x86_64
Percona-Server-shared-51-5.1.73-rel14.12.625.rhel6.x86_64
Percona-XtraDB-Cluster-shared-56-5.6.46-28.38.1.el6.x86_64
Percona-XtraDB-Cluster-server-56-5.6.46-28.38.1.el6.x86_64
Percona-XtraDB-Cluster-galera-3-3.38-1.el6.x86_64
Percona-XtraDB-Cluster-56-5.6.46-28.38.1.el6.x86_64
yum remove Percona-XtraDB-Cluster-client-56-5.6.46-28.38.1.el6.x86_64
……
*/
yum install Percona-XtraDB-Cluster-57 -y
2.1.4 备份grastate.dat
以便在它因网络问题而损坏或归零时恢复它。
cd /var/lib/mysql
cp grastate.dat grastate.dat_bak
2.1.5 以单实例模式启动该节点
mysqld --skip-grant-tables --skip-networking --user=mysql --wsrep-provider='none'
#检查数据库是否启动
[root@pc2 ~]# ps -ef | grep mysql
mysql 3930 3858 15 13:33 pts/1 00:00:01 mysqld --skip-grant-tables --skip-networking --user=mysql --wsrep-provider=none
2.1.6 执行mysql_upgrade
新打开一个会话,执行:mysql_upgrade
……
Upgrade process completed successfully.
Checking if update is needed.
2.1.7 关闭数据库
mysqladmin shutdown或kill掉mysql进程
2.1.8 重命名配置文件
在CentOS上,my.cnf配置文件可能会被重命名为my.cnf.rpmsave。所以,需要检查下my.cnf,my.cnf.rpmsave文件内容,需要的话,将升级后的节点重新加入群集之前将其重命名回来。
cd /etc
mv my.cnf.rpmsave my.cnf
2.1.9 将升级后的节点加入到集群里
service mysql start
/*
如果数据库起不来,报错:ERROR! MySQL (Percona XtraDB Cluster) is not running, but PID file exists
可尝试根据其他节点的配置文件,新建下my.cnf,注意需要修改wsrep_node_name及wsrep_node_address的值
*/
2.1.10 检查数据同步情况
检查之前插入的两条数据是否同步到了该节点上。
新插入两条数据,再次检查数据同步情况。
检查集群状态:
2.1.11 检查数据库版本
mysql> select @@version;
+----------------+
| @@version |
+----------------+
| 5.7.28-31-57.2 |
+----------------+
1 row in set (0.00 sec)
2.2 对群集中的下一个节点重复2.1步骤,直到升级所有节点
注意:
节点在重新连接集群时,应该使用IST进行同步。为此,最好不要离开群集节点太长时间。
当执行任何升级时,如果服务器已脱机一段时间,可以使用SST进行同步。SST完成后,需要再一次升级数据目录结构(使用mysql_upgrade)确保与较新版本的二进制文件兼容:
① 停止mysql服务
service mysql stop
② mysqld --skip-grant-tables --skip-networking --user=mysql --wsrep-provider='none'
③ 执行mysql_upgrade
--本篇文章主要参考自PXC官方手册,该手册也介绍了怎样进行小版本升级(如5.7内的小版本升级)。