您好,登錄后才能下訂單哦!
本文主要給大家介紹MySQL5.7傳統快速切換GTID方法,文章內容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL5.7傳統快速切換GTID方法吧。
當前場景:
某些業務場景還未開啟GTID服務組,在最新版本中,BINLOG組提交也基于GTID方式,因此如何檢測是否符合開啟GTID條件,在線切換使用GTID,以及如何快速回滾:
gtid_mode參數新選項:MySQL提供兩個額外的選項off_permissive和on_permissive
gtid-mode的幾種狀態說明:
off :不產生gtid,基于binlog+position,slave也不能接受gtid的日志;
off_permissive:不產生gtid,但做為slave可以識別gtid事務也可以識別非gtid事務;
on_permissive:產生gtid事務,slave可以處理gtid事務和非gtid事務;
on:產生gtid事務,slave只接受gtid事務
enforce-gtid-consistency=ON時,以下三類語句時不支持的
CREATE TABLE ... SELECT statements
CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements inside transactions
Transactions or statements that update both transactional and nontransactional tables. There is an exception that nontransactional DML is allowed in the same transaction or in the same statement as transactional DML, if all nontransactional tables are temporary.
而實際上這個限制沒有必要這么嚴格,
CREATE TABLE ... SELECT statements
對于binlog_format=row, gtid_next='automatic'時可以放開限制。
生成的binlog包含兩個GTID, 一個是建表語句,一個是包含多個insert的事務。
事務中包含事務表和非事務表
對于gtid_next='automatic'時可以放開限制。
生成的binlog包含兩個GTID, 一個是所有非事務表的,一個是所有事務表的。
對update多表(包含事務表和非事務表)此時需額外要求binlog_format=row。
在線開啟GTID過程如下:
① 所有的server上執行
set @@global.enforce_gtid_consistency = warn; 特別注意: 這一步是關建的一步使用不能出現警告。會將不符合的語句記入錯誤日志
② 所有的server上執行:
set @@global.enforce_gtid_consistency = on;
③ 所有的Server上執行(不關心最先最后,但要執行完):
set @@global.gtid_mode = off_permissive;
④ 所有的server上執行:
set @@global.gtid_mode=on_permissive;
實質在這一步驟生成的日志都是帶GTID的日志了,這個步驟號稱是不關心任何節點,但從實際管理上推薦在slave上先執行,然后再去master上執行。
⑤ 確認傳統的binlog復制完畢,該值為0
show status like 'ongoing_anonymous_transaction_count';
所有節點進行判斷 show status like 'ongoing_anonymous_transaction_count’; 為零
⑥ 所有的節點執行: flush logs; 用于切換一下日志。
⑦ 所有的節點啟用gtid_mode
set @@global.gtid_mode=on;
⑧ 啟用Gtid的自動查找節點復制:
stop slave;
change master to master_auto_position=1;
start slave;
⑨ 把gtid_mode = on相關配置寫入配置文件
gtid_mode=on
enforce_gtid_consistency=on
最后可以看到傳統復制的一個變化,通過BINLOG觀察:
#171116 19:16:57 server id 2 end_log_pos 16188 CRC32 0x75584212 Anonymous_GTIDlast_committed=50sequence_number=51
#171116 19:17:03 server id 2 end_log_pos 16522 CRC32 0x3b42637e Anonymous_GTIDlast_committed=51sequence_number=52
#171116 19:19:54 server id 2 end_log_pos 16851 CRC32 0x08383e43 Anonymous_GTIDlast_committed=52sequence_number=53
#171116 19:19:59 server id 2 end_log_pos 17185 CRC32 0xd3445edc Anonymous_GTIDlast_committed=53sequence_number=54
#171116 19:21:06 server id 2 end_log_pos 17514 CRC32 0xcfd6ac97 Anonymous_GTIDlast_committed=54sequence_number=55
#171116 19:21:11 server id 2 end_log_pos 17802 CRC32 0xee11dc12 Anonymous_GTIDlast_committed=55sequence_number=56
GTID復制數據:
#171117 13:40:00 server id 2 end_log_pos 456322 CRC32 0xf7074b53 GTIDlast_committed=1036sequence_number=1132
#171117 13:40:00 server id 2 end_log_pos 456725 CRC32 0xcb86f0b2 GTIDlast_committed=1036sequence_number=1133
#171117 13:40:00 server id 2 end_log_pos 457128 CRC32 0x8b14303e GTIDlast_committed=1036sequence_number=1134
#171117 13:40:00 server id 2 end_log_pos 457533 CRC32 0x4f492e18 GTIDlast_committed=1036sequence_number=1135
#171117 13:40:00 server id 2 end_log_pos 457940 CRC32 0xf0b078b6 GTIDlast_committed=1036sequence_number=1136
#####從GTID模式到傳統模式過程:
① 在SLAVE:
stop slave;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.1.130
Master_User: dlan
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000010
Read_Master_Log_Pos: 458282
同時執行:
change master to master_auto_position=0,MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=458282;
start slave;
②在MS上執行:
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
③在MS上執行
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
④在MS上執行
SELECT @@GLOBAL.GTID_OWNED; ##都為空就可以
⑤關閉GTID
SET @@GLOBAL.GTID_MODE = OFF;
最后觀察又GTID又是匿名:
#171117 14:32:38 server id 2 end_log_pos 319730 CRC32 0xc26f13a7 Anonymous_GTID last_committed=699sequence_number=793
#171117 14:32:38 server id 2 end_log_pos 320133 CRC32 0xf480c415 Anonymous_GTIDlast_committed=699sequence_number=794
#171117 14:32:38 server id 2 end_log_pos 320538 CRC32 0xa65ed8f1 Anonymous_GTIDlast_committed=699sequence_number=795
#171117 14:32:38 server id 2 end_log_pos 320945 CRC32 0xb7330b5e Anonymous_GTIDlast_committed=699sequence_number=796
#171117 14:32:38 server id 2 end_log_pos 321348 CRC32 0x619e04bb Anonymous_GTIDlast_committed=699sequence_number=797
#171117 14:32:38 server id 2 end_log_pos 321751 CRC32 0x250f903c Anonymous_GTIDlast_committed=699sequence_number=798
#171117 14:32:38 server id 2 end_log_pos 322156 CRC32 0x247a96f9 Anonymous_GTIDlast_committed=699sequence_number=799
看完以上關于MySQL5.7傳統快速切換GTID方法,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業知識信息 ,可以持續關注我們的行業資訊欄目的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。