天天看點

GTID和傳統模式複制之間的切換

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修改