5.7.6開始可以線上切換
gtid-mode的幾種狀态說明:
off :不産生gtid,基于binlog+position,slave也不能接受gtid的日志;
off_permissive:不産生gtid,但做為slave可以識别gtid事務也可以識别非gtid事務;
on_permissive:産生gtid事務,slave可以處理gtid事務和非gtid事務;
on:産生gtid事務,slave隻接受gtid事務。
傳統--->GTID
1.所有的Server執行
set @@global.enforce_gtid_consistency = warn;
特别注意: 這一步是關建的一步使用不能出現警告。
2.所有的server上執行
set @@global.enforce_gtid_consistency = on;
3.所有的Server上執行(要執行完)
set @@global.gtid_mode = off_permissive;
set @@global.gtid_mode=on_permissive; #産生gtid的日志,這個步驟号稱是不關心任何節點,但從管理上推薦在slave上先執行,然後再去master上執行。
4.傳統的binlog複制完成确認
show status like 'ongoing_anonymous_transaction_count';
需要所有的節點都确認為0.
所有的節點也可以執行一下: flush logs; 用于切換一下日志。
5. 所有的節點啟用gtid_mode
set @@global.gtid_mode=on;
6.配置檔案修改
gtid_mode=on
enforce_gtid_consistency=on
7.啟用gtid的自動查找節點複制
stop slave for channel 'master-3306101';
change master to master_auto_position=1 for channel 'master-3306101';
start slave for channel 'master-3306101'
GTID--->傳統
就是上面的反向過程
1.停止複制
show slave status\G;檢視Exec_Master_Log_Pos的位置
change master to master_host='10.20.30.101',master_user='repl',master_password='repl4slave',master_port=3306,master_auto_position=0,master_log_file='mysql-bin.000008',master_log_pos=83942 for channel 'master-3306101';
2.主庫先更改日志格式,然後從庫更改
set @@global.gtid_mode=on_permissive;
set @@global.gtid_mode=off_permissive;
<b>3.</b>
select @@global.gtid_owned;
要為空才正常
4.動态修改參數
set @@global.gtid_mode=off;
set @@global.enforce_gtid_consistency = off;
5.my.cnf修改