MGR 單主模式組內滾動升級
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/downloads/repo/yum/
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 引數
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();