“滾動升級”意味着在升級過程中無需關閉整個集羣,不影響業務。
跨版本升級(從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內的小版本升級)。