前言
在MySQL 5.7.6或更高版本,可以在線切換複製,即 不必關閉MySQL數據庫。
在線啓用GTID複製
1、修改參數 enforce_gtid_consistency
以下操作 均在 主從中執行
# 在錯誤日誌中監控修改參數之後是否會出現警告
tail -f error.log
set global enforce_gtid_consistency=warn;
# 當不會出現警告了,再執行該修改爲on
set global enforce_gtid_consistency=on;
2、修改參數gtid_mode
仔細觀察會發現,在將參數gtid_mode修改爲on_permissive 和 on 時,都會自動使用下一個新的binlog文件。
# 主從均修改
set global gtid_mode=off_permissive;
# 主從均修改
set global gtid_mode=on_permissive;
# 只要顯示了一次 零 即可
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
#請等待,所有匿名事務都被複制了,使用一下操作檢驗:
show master status; # 在主庫查看
select master_pos_wait('mybinlog.000009','4580'); # 在從庫校驗,值爲0纔可以
# 在執行此步驟之前,要確定沒有傳統事務存在任何地方了(主從均修改)
set global gtid_mode=on;
3、建立主從連接,開始複製
直接使用 master_auto_position=1,它會自動判斷binlog的文件和位置。
# 至此,確保每個事務都有GTID了,開始建立複製連接:
stop slave;
change master to master_auto_position=1,master_host='192.168.1.128',master_port=3306,\
master_user='repl',master_password='repl';
start slave;
show slave status\G
4、修改配置文件,使修改持久化
# 在主從上,均修改文件 my.cnf
gtid-mode=on
enforce_gtid_consistency=on
在線禁用GTID複製
1、停止複製,修改change master to ,開始複製
stop slave;
change master to master_auto_position=0,master_host='192.168.1.128',master_port=3306,\
master_user='repl',master_password='repl',master_log_file='mybinlog.000006',master_log_pos=2774;
start slave;
show slave status\G
其中,在編寫 change master to 語句時,需要注意幾點:
- 指向的主庫binlog文件是:relay_master_log_file。
- 指向的主庫binlog位置是:exec_master_log_pos。
- 並將自定定義主庫的位置的參數 關閉。
2、參數的動態修改
在主從庫,均操作:
set global gtid_mode=on_permissive; # 產生GTID,但是傳統和gtid都可以複製
set global gtid_mode=off_permissive; # 不再產生GTID,但是傳統和gtid都可以複製
SELECT @@GLOBAL.GTID_OWNED; # 等到它爲空
# 在從庫執行,填寫在主庫查到的信息,功能:從庫距離主庫的4580這個位置還有多少事務
select master_pos_wait('mybinlog.000009','4580');
# 等待,直到不使用具有GTID事務的二進制日誌,必須保證複製拓撲中任何地方不存在GTID事務,再執行以下步驟
# 在主從庫,均操作:
set global gtid_mode=off; # 不再產生GTID,只複製傳統的文件和位置,此時會產生新的binlog文件
set global enforce_gtid_consistency=off;
3、複製正常之後,修改配置文件,使修改持久化
# 在主從均修改文件my.cnf
gtid-mode=off
enforce_gtid_consistency=off
小結
在啓用或禁用GTID複製時,每執行一次參數的修改,都要仔細觀察,尤其是觀察之前的舊事務是否執行完了,再將gtid_mode 改爲ON 或OFF!還有,最後一定要持久化到配置文件,否則數據庫在某個時刻重啓了會有意想不到的驚嚇哦!