“滚动升级”意味着在升级过程中无需关闭整个集群,不影响业务。
跨版本升级(从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的滚动升级。
一 试验环境
角色 | 主机名 | IP | 操作系统 | PXC版本 |
pxc1 | pc1 | 192.168.1.202 |
CentOS 6 |
从5.6升级到5.7 |
pxc2 | pc2 | 192.168.1.203 | ||
pxc3 | pc3 | 192.168.1.204 |
二 试验步骤
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
[root@pc1 download]# mysql_upgrade
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
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
baidd.t OK
sys.sys_config OK
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内的小版本升级)。