MySQL在線開(kāi)啟或禁用GTID模式
基本概述
我們知道MySQL有2種方式指定復(fù)制同步的方式,分別為:
- 基于binlog文件名及位點(diǎn)的指定方式
- 匿名事務(wù)(Anonymous_gtid_log_event) - 基于GTID(全局事務(wù)ID)的指定方式
- GTID事務(wù)(Gtid_log_event)
而基于GTID的方式一方面在一主多從的架構(gòu)下主從切換有著明顯優(yōu)勢(shì)外,對(duì)于日常復(fù)制異常的故障診斷方面也更為方便,從MySQL 5.7.6之后便開(kāi)始支持動(dòng)態(tài)開(kāi)啟和關(guān)閉GTID模式,其參數(shù)GTID_MODE有以下取值
- OFF - 只允許匿名事務(wù)被復(fù)制同步
- OFF_PERMISSIVE - 新產(chǎn)生的事務(wù)都是匿名事務(wù),但也允許有GTID事務(wù)被復(fù)制同步
- ON_PERMISSIVE - 新產(chǎn)生的都是GTID事務(wù),但也允許有匿名事務(wù)被復(fù)制同步
- ON - 只允許GTID事務(wù)被復(fù)制同步
在線開(kāi)啟GTID
1. 設(shè)置GTID校驗(yàn)ENFORCE_GTID_CONSISTENCY為WARN
該操作的目的是允許在主庫(kù)執(zhí)行的SQL語(yǔ)句違反GTID一致性校驗(yàn),且只在主庫(kù)的錯(cuò)誤日志中輸出warning級(jí)別日志以作提醒,目的是為了考慮如果復(fù)制方式改為GTID模式后應(yīng)用程序不會(huì)因?yàn)镚TID的一些限制導(dǎo)致異常報(bào)錯(cuò),
如:使用CREATE TABLE AS SELECT語(yǔ)法在GTID模式下不支持,而ENFORCE_GTID_CONSISTENCY設(shè)置為WARN時(shí),只會(huì)在錯(cuò)誤日志提示,不會(huì)直接報(bào)錯(cuò),

## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
2. 設(shè)置GTID校驗(yàn)ENFORCE_GTID_CONSISTENCY為ON
觀測(cè)一段時(shí)間(嚴(yán)謹(jǐn)?shù)那闆r可能觀測(cè)一天以上),確認(rèn)上一個(gè)步驟未在錯(cuò)誤日志中出現(xiàn)相關(guān)Warning信息后,正式開(kāi)啟GTID一致性校驗(yàn),當(dāng)設(shè)置為ON后,如果再執(zhí)行CREATE TABLE AS SELECT語(yǔ)句則會(huì)直接報(bào)錯(cuò)

## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
3. 設(shè)置GTID_MODE為OFF_PERMISSIVE
該操作是一個(gè)過(guò)渡屬性,表示新產(chǎn)生的事務(wù)依舊是匿名事務(wù),但也允許有GTID事務(wù)被復(fù)制同步
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4. 設(shè)置GTID_MODE為ON_PERMISSIVE
該操作依舊是一個(gè)過(guò)渡屬性,而其表示的則是新產(chǎn)生的都是GTID事務(wù),但也允許有匿名事務(wù)被復(fù)制
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
5. (關(guān)鍵點(diǎn))確保匿名事務(wù)回放完畢
該步驟的目的是確保在正式轉(zhuǎn)換為完整的GTID模式前,老的匿名事務(wù)均以被回放完畢,確保GTID_MODE設(shè)置為ON時(shí),不會(huì)因?yàn)闅埩舻哪涿聞?wù)導(dǎo)致復(fù)制同步報(bào)錯(cuò),有以下2種方式進(jìn)行校驗(yàn)
## 該操作僅在從庫(kù)執(zhí)行即可 ## 方式1:確保該狀態(tài)值輸出的匿名事務(wù)數(shù)顯示為0(注意:只要出現(xiàn)過(guò)0即可表示已經(jīng)轉(zhuǎn)換完成,即使后續(xù)該狀態(tài)值從0變?yōu)榱舜笥?的值也不影響) SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; ## 在從庫(kù)上多次執(zhí)行該語(yǔ)句 ## 方式2: 查詢?cè)撘晥D中LAST_SEEN_TRANSACTION可以觀測(cè)當(dāng)前同步的事務(wù)是否還存在ANONYMOUS事務(wù) select * from performance_schema.replication_applier_status_by_worker;
確保匿名事務(wù)數(shù)為0

確保回放線程回放的事務(wù)都已是GTID事務(wù)

6. 觸發(fā)一輪日志切換FLUSH LOGS
該操作的目的是為了在主庫(kù)觸發(fā)binlog的輪換,使新生成的binlog都是包含GTID的事務(wù)(防止一個(gè)binlog中包含2種類(lèi)型的事務(wù)日志)
## 該操作僅在主庫(kù)執(zhí)行即可 FLUSH LOGS;
7. 正式開(kāi)啟GTID_MODE為ON
正式開(kāi)啟GTID
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = ON; SELECT @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY;
8. 修改配置文件確保GTID參數(shù)持久化
在my.cnf配置文件中增加GTID參數(shù),確保重啟不會(huì)失效,該操作也可在第一步進(jìn)行
## 該操作在主從庫(kù)均執(zhí)行 gtid-mode = ON enforce-gtid-consistency = 1
9. 修改復(fù)制模式為GTID方式
將復(fù)制模式從基于POS點(diǎn)改為基于GTID
## 停止復(fù)制 STOP SLAVE; ## 修改為GTID模式 CHANGE MASTER TO MASTER_AUTO_POSITION = 1; ## 開(kāi)啟復(fù)制 START SLAVE; ## 觀測(cè)復(fù)制同步狀態(tài) SHOW SLAVE STATUS\G
在線關(guān)閉GTID
方式類(lèi)似于在線開(kāi)啟GTID的逆向操作,以下只寫(xiě)出步驟和具體命令,不做詳細(xì)解釋
- 先將GTID模式的復(fù)制改為基于POS點(diǎn)的復(fù)制
- 設(shè)置GTID_MODE為ON_PERMISSIVE
- 設(shè)置GTID_MODE為OFF_PERMISSIVE
- 觀測(cè)GTID_OWNED狀態(tài)變量變?yōu)榭罩导皉eplication_applier_status_by_worker表中事務(wù)均轉(zhuǎn)為匿名事務(wù)
- 觸發(fā)FLUSH LOGS
- 設(shè)置GTID_MODE為OFF
- 設(shè)置ENFORCE_GTID_CONSISTENCY為OFF
- 修改my.cnf配置文件中GTID相關(guān)參數(shù)為OFF
1. 將復(fù)制改為基于POS點(diǎn)方式
stop slave; show slave status\G ## 取show slave status\G中的Master_Log_File和Exec_Master_Log_Pos填入 CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; start slave; show slave status\G
2. 設(shè)置GTID_MODE為ON_PERMISSIVE
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
3. 設(shè)置GTID_MODE為OFF_PERMISSIVE
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4. (關(guān)鍵點(diǎn))確保GTID事務(wù)回放完畢
觀測(cè)GTID_OWNED狀態(tài)變量變?yōu)榭罩导皉eplication_applier_status_by_worker表中事務(wù)均轉(zhuǎn)為匿名事務(wù)
## 該操作在從庫(kù)執(zhí)行即可 SELECT @@GLOBAL.GTID_OWNED; select * from performance_schema.replication_applier_status_by_worker;
5. 觸發(fā)FLUSH LOGS
## 該操作在主庫(kù)執(zhí)行即可 FLUSH LOGS;
6. 設(shè)置GTID_MODE為OFF
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.GTID_MODE = OFF;
7. 設(shè)置ENFORCE_GTID_CONSISTENCY為OFF
## 該操作在主從庫(kù)均執(zhí)行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;
8. 修改my.cnf配置文件中GTID相關(guān)參數(shù)為OFF
## 該操作在主從庫(kù)均執(zhí)行 gtid-mode = OFF enforce-gtid-consistency = 1
命令簡(jiǎn)版
1. 在線開(kāi)啟GTID
自行判斷命令在主庫(kù)還是從庫(kù)執(zhí)行
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN; SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON; SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; select * from performance_schema.replication_applier_status_by_worker; FLUSH LOGS; SET @@GLOBAL.GTID_MODE = ON; ## 配置文件修改 gtid-mode = ON enforce-gtid-consistency = 1 ## 將復(fù)制模式從基于POS點(diǎn)改為基于GTID STOP SLAVE; CHANGE MASTER TO MASTER_AUTO_POSITION = 1; START SLAVE; SHOW SLAVE STATUS\G
2. 在線關(guān)閉GTID
自行判斷命令在主庫(kù)還是從庫(kù)執(zhí)行
stop slave; show slave status\G ## 取show slave status\G中的Master_Log_File和Exec_Master_Log_Pos填入 CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; start slave; show slave status\G SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; SELECT @@GLOBAL.GTID_OWNED; select * from performance_schema.replication_applier_status_by_worker; FLUSH LOGS; SET @@GLOBAL.GTID_MODE = OFF; SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; ## 修改my.cnf配置文件中GTID相關(guān)參數(shù)為OFF gtid-mode = OFF enforce-gtid-consistency = 1
參考鏈接
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online.html
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-enable-gtids.html
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-disable-gtids.html
以上所述是小編給大家介紹的MySQL在線開(kāi)啟或禁用GTID模式,希望對(duì)大家有所幫助。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- MySQL gtid的具體使用
- MySQL主從復(fù)制基于binlog與GTID詳解
- MySQL基于GTID主從搭建
- MySQL復(fù)制之GTID復(fù)制的具體使用
- MySQL主從復(fù)制之GTID模式詳細(xì)介紹?
- MySQL GTID全面總結(jié)
- MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)
- Mysql GTID Mha配置方法
- 詳解MySQL主從復(fù)制實(shí)戰(zhàn) - 基于GTID的復(fù)制
- MySQL9.1.0實(shí)現(xiàn)GTID模式的項(xiàng)目實(shí)踐
相關(guān)文章
利用MySQL主從配置實(shí)現(xiàn)讀寫(xiě)分離減輕數(shù)據(jù)庫(kù)壓力
今天小編就為大家分享一篇關(guān)于利用MySQL主從配置實(shí)現(xiàn)讀寫(xiě)分離減輕數(shù)據(jù)庫(kù)壓力,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
MYSQL實(shí)現(xiàn)排名及查詢指定用戶排名功能(并列排名功能)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于MYSQL實(shí)現(xiàn)排名及查詢指定用戶排名功能(并列排名功能)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2018-10-10
Mysql中禁用與啟動(dòng)觸發(fā)器教程【推薦】
在使用MYSQL過(guò)程中,經(jīng)常會(huì)使用到觸發(fā)器,但是有時(shí)使用不當(dāng)會(huì)造成一些麻煩。下面小編給大家?guī)?lái)了Mysql中禁用與啟動(dòng)觸發(fā)器教程,感興趣的朋友一起看看吧2018-08-08
淺談mysql數(shù)據(jù)庫(kù)中的using的用法
在用Join進(jìn)行多表聯(lián)合查詢時(shí),我們通常使用On來(lái)建立兩個(gè)表的關(guān)系。其實(shí)還有一個(gè)更方便的關(guān)鍵字,那就是Using。2015-04-04
淺談MySQL中g(shù)roup_concat()函數(shù)的排序方法
下面小編就為大家?guī)?lái)一篇淺談MySQL中g(shù)roup_concat()函數(shù)的排序方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12

