當前場景
當前某些業務還有未開啟GTID服務組,升級5.7后,如何檢測是否符合開啟GTID條件,如何在線修改切換使用GTID;已經升級5.7后,已經開啟GTID,如何快速回滾后退;
線上gtid如何維護等等,以上場景通過歸納下面內容解決
- gtid_mode參數新選項值
- online gtid enable
- online gtid disable
gtid_mode參數新選項
mysql 5.7.6后,mysql提供了兩個額外選項off_permissive和on_permissive
off
off_permissive
on_permissive
on
上面四個狀態變更必須是按照順序變更,如不允許gtid_mode=off,直接變更為on_permissive;
當設置為off_permissive,不產生GTID事務, Slave接受不帶GTID的事務(匿名事務)也接受帶GTID的事務
當設置為on_permissive時,新事務為gtid事務,slave接受GTID事務也接受不帶GTID事務
gtid值master 與slave 兼容性列表
上表說明
Y: 表示master和slave的gtid值是兼容的
N:表示master和slave的gtid值是不兼容的
Y*:表示auto_positioning是可用的
online gtid enable
限制條件: mysql 版本需5.7.6之后;所有server gtid_mode=off
1 、在每一台服務器上執行。err log沒有任何warning產生 ,這是非常重要的一步,確保沒有error log產生繼續step 2;主要驗證是否可以開啟gtid,如create table select* from table 不支持事件
set @@global.enforce_gtid_consistency=warn; |
2、在每一台server上執行
set @@global.enforce_gtid_consistency=on; |
3、每一台server 執行,在那一台服務器執行沒有先后之分
set @@global.gtid_mode=off_permissive; |
4、每一台server 執行,執行順序沒有先后之分,要保證下一步操作之前,上面的操作都已在所有server上執行過
set @@global.gtid_mode=on_permissive; |
5、保證每一台ongoing_anonymous_transaction_count狀態值為零
show status like 'ongoing_anonymous_transaction_count'; |
6、等待步驟5生成的所有事務復制到所有服務器,此時不需要停止服務器更新,要保證所有的匿名事務都已經復制
7、步驟六完成,基本上可以進行步驟8.(此處沒有考慮備份和restore情況)
8、設置 gtid_mode=on
set @@global.gtid_mode=on; |
9、持久化my.cnf ,每台slave上執行
stop slave; change master to master_auto_position=1 ; start slave; |
online gtid disable
限制:所有server必須5.7.6之后;gtid_mode=on
1、每一台slave上執行
stop slave; change master to master_auto_position=0,master_log_file='mysql-bin.000383',master_log_pos= 245710922 ; start slave; |
2、在每一台server上執行
set @@global.gtid_mode=on_permissive; |
3、在每一台server上執行 保證下一步操作之前,上面的操作都已在所有server上執行過
set @@global.gtid_mode=off_permissive; |
4、在每一台server上執行,保證global.gtid_owned變量字符串為空。
select @@global.gtid_owned; |
5、等待存在於binlog 中的事物都已經apply到slave
6、沒有略過,在此過程中需關注是否有備份或restore
7、每一台server執行
set @@global.gtid_mode=off ; |
8、持久化gtid_mode=off 到my.cnf配置文件
轉自
MySQL5.7 GTID在線開啟與關閉 - CSDN博客
http://blog.csdn.net/aeolus_pu/article/details/78502846
