您好,登錄后才能下訂單哦!
這篇文章主要講解了“MySQL怎么開啟或禁用GTID模式”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL怎么開啟或禁用GTID模式”吧!
我們知道MySQL有2種方式指定復制同步的方式,分別為:
基于binlog文件名及位點的指定方式
- 匿名事務(Anonymous_gtid_log_event)
基于GTID(全局事務ID)的指定方式
- GTID事務(Gtid_log_event)
而基于GTID的方式一方面在一主多從的架構下主從切換有著明顯優勢外,對于日常復制異常的故障診斷方面也更為方便,從MySQL 5.7.6之后便開始支持動態開啟和關閉GTID模式,其參數GTID_MODE有以下取值
OFF - 只允許匿名事務被復制同步
OFF_PERMISSIVE - 新產生的事務都是匿名事務,但也允許有GTID事務被復制同步
ON_PERMISSIVE - 新產生的都是GTID事務,但也允許有匿名事務被復制同步
ON - 只允許GTID事務被復制同步
該操作的目的是允許在主庫執行的SQL語句違反GTID一致性校驗,且只在主庫的錯誤日志中輸出warning級別日志以作提醒,目的是為了考慮如果復制方式改為GTID模式后應用程序不會因為GTID的一些限制導致異常報錯,
如:使用CREATE TABLE AS SELECT語法在GTID模式下不支持,而ENFORCE_GTID_CONSISTENCY設置為WARN時,只會在錯誤日志提示,不會直接報錯,
## 該操作在主從庫均執行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
觀測一段時間(嚴謹的情況可能觀測一天以上),確認上一個步驟未在錯誤日志中出現相關Warning信息后,正式開啟GTID一致性校驗,當設置為ON后,如果再執行CREATE TABLE AS SELECT語句則會直接報錯
## 該操作在主從庫均執行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
該操作是一個過渡屬性,表示新產生的事務依舊是匿名事務,但也允許有GTID事務被復制同步
## 該操作在主從庫均執行 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
該操作依舊是一個過渡屬性,而其表示的則是新產生的都是GTID事務,但也允許有匿名事務被復制
## 該操作在主從庫均執行 SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
該步驟的目的是確保在正式轉換為完整的GTID模式前,老的匿名事務均以被回放完畢,確保GTID_MODE設置為ON時,不會因為殘留的匿名事務導致復制同步報錯,有以下2種方式進行校驗
## 該操作僅在從庫執行即可 ## 方式1:確保該狀態值輸出的匿名事務數顯示為0(注意:只要出現過0即可表示已經轉換完成,即使后續該狀態值從0變為了大于0的值也不影響) SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; ## 在從庫上多次執行該語句 ## 方式2: 查詢該視圖中LAST_SEEN_TRANSACTION可以觀測當前同步的事務是否還存在ANONYMOUS事務 select * from performance_schema.replication_applier_status_by_worker;
確保匿名事務數為0
確保回放線程回放的事務都已是GTID事務
該操作的目的是為了在主庫觸發binlog的輪換,使新生成的binlog都是包含GTID的事務(防止一個binlog中包含2種類型的事務日志)
## 該操作僅在主庫執行即可 FLUSH LOGS;
正式開啟GTID
## 該操作在主從庫均執行 SET @@GLOBAL.GTID_MODE = ON; SELECT @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY;
在my.cnf配置文件中增加GTID參數,確保重啟不會失效,該操作也可在第一步進行
## 該操作在主從庫均執行 gtid-mode = ON enforce-gtid-consistency = 1
將復制模式從基于POS點改為基于GTID
## 停止復制 STOP SLAVE; ## 修改為GTID模式 CHANGE MASTER TO MASTER_AUTO_POSITION = 1; ## 開啟復制 START SLAVE; ## 觀測復制同步狀態 SHOW SLAVE STATUS\G
方式類似于在線開啟GTID的逆向操作,以下只寫出步驟和具體命令,不做詳細解釋
先將GTID模式的復制改為基于POS點的復制
設置GTID_MODE為ON_PERMISSIVE
設置GTID_MODE為OFF_PERMISSIVE
觀測GTID_OWNED狀態變量變為空值及replication_applier_status_by_worker表中事務均轉為匿名事務
觸發FLUSH LOGS
設置GTID_MODE為OFF
設置ENFORCE_GTID_CONSISTENCY為OFF
修改my.cnf配置文件中GTID相關參數為OFF
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;
觀測GTID_OWNED狀態變量變為空值及replication_applier_status_by_worker表中事務均轉為匿名事務
## 該操作在從庫執行即可 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;
## 該操作在主從庫均執行 gtid-mode = OFF enforce-gtid-consistency = 1
自行判斷命令在主庫還是從庫執行
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 ## 將復制模式從基于POS點改為基于GTID STOP SLAVE; CHANGE MASTER TO MASTER_AUTO_POSITION = 1; START SLAVE; SHOW SLAVE STATUS\G
自行判斷命令在主庫還是從庫執行
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相關參數為OFF gtid-mode = OFF enforce-gtid-consistency = 1
感謝各位的閱讀,以上就是“MySQL怎么開啟或禁用GTID模式”的內容了,經過本文的學習后,相信大家對MySQL怎么開啟或禁用GTID模式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。