1. 程式人生 > >傳統複製線上切換到GTID模式

傳統複製線上切換到GTID模式

傳統複製切換到GTID模式

5.7.6以後引數gtid_mode可以動態修改
GTID_MODE:

  • OFF

    徹底關閉GTID,如果關閉狀態的備庫接受到帶GTID的事務,則複製中斷

  • OFF_PERMISSIVE

    可以認為是關閉GTID前的過渡階段,主庫在設定成該值後不再生成GTID,備庫在接受到帶GTID 和不帶GTID的事務都可以容忍
    主庫在關閉GTID時,執行事務會產生一個Anonymous_Gtid事件,會在備庫執行:
    SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’
    備庫在執行匿名事務時,就不會去嘗試生成本地GTID了

  • ON_PERMISSIVE

    可以認為是開啟GTID前的過渡階段,主庫在設定成該值後會產生GTID,同時備庫依然容忍帶GTID和不帶GTID的事務

  • ON

    完全開啟GTID,如果開啟狀態的備庫接受到不帶GTID的事務,則複製中斷

準備工作
1.拓撲中的所有伺服器都必須使用MySQL 5.7.6或更高版本. 除非拓撲中的所有伺服器都使用此版本,否則無法在任何單個伺服器上啟用GTID事務.
2.所有伺服器都將gtid_mode設定為預設值OFF.

The following procedure can be paused at any time and later resumed where it was, or reversed by jumping to the corresponding step of Section 16.1.5.3, “Disabling GTID Transactions Online”, the online procedure to disable GTIDs. This makes the procedure fault-tolerant because any unrelated issues that may appear in the middle of the procedure can be handled as usual, and then the procedure continued where it was left off.
切換過程可以再任意時刻停止,並稍後繼續執行

注意
在每一步執行完全完成後再執行下一步

從傳統複製模式切換到GTID模式

1.在每個sever執行:

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;

讓伺服器與您的正常工作負載執行一段時間並監視日誌. 如果此步驟在日誌中導致任何警告,請調整應用程式,以使其僅使用相容GTID的功能,並且不會產生任何警告.

Important
這是第一個重要步驟. 您必須確保在進入下一步驟之前不會在錯誤日誌中生成警告.

2.在每個sever執行:

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON
;

3.在每個sever執行:

SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

哪個伺服器首先執行此語句無關緊要,但重要的是所有伺服器在任何伺服器開始下一步之前完成此步驟.

4.在每個sever執行:

SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

哪個伺服器首先執行此語句無關緊要.

5.在每個伺服器上,等待狀態變數ONGOING_ANONYMOUS_TRANSACTION_COUNT為零. 可以使用如下方式查詢:

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

ONGOING_ANONYMOUS_TRANSACTION_COUNT顯示已標記為匿名的正在進行的事務的數量

注意:
在從庫上,理論上這個值可能顯示為零,之後又顯示為非零值.這並不是問題,只要顯示為零一次即可

6.等待生成到步驟5的所有事務複製到所有伺服器. 您可以在不停止更新的情況下執行此操作:唯一重要的是所有anonymous transactions都被複制了.

有關檢查所有匿名事務已複製到所有伺服器的一種方法,請參見第16.1.5.4節“驗證匿名事務的複製”.

7.If you use binary logs for anything other than replication, for example point in time backup and restore, wait until you do not need the old binary logs having transactions without GTIDs.

For instance, after step 6 has completed, you can execute FLUSH LOGS on the server where you are taking backups. Then either explicitly take a backup or wait for the next iteration of any periodic backup routine you may have set up.

Ideally, wait for the server to purge all binary logs that existed when step 6 was completed. Also wait for any backup taken before step 6 to expire.

Important
This is the second important point. It is vital to understand that binary logs containing anonymous transactions, without GTIDs cannot be used after the next step. After this step, you must be sure that transactions without GTIDs do not exist anywhere in the topology.

8.在每個sever執行:

SET @@GLOBAL.GTID_MODE = ON;

9.在每個sever的my.cnf配置檔案中新增

gtid-mode=ON
ENFORCE_GTID_CONSISTENCY = ON

現在可以保證所有事務都具有GTID(除了在步驟5或更早版本中生成的已經處理的事務之外). 要開始使用GTID協議,以便稍後執行自動故障切換,請在每個從站上執行以下操作. 或者,如果使用多源複製,請對每個通道執行此操作,幷包括FOR CHANNEL通道子句:

STOP SLAVE [FOR CHANNEL 'channel'];
CHANGE MASTER TO MASTER_AUTO_POSITION = 1 [FOR CHANNEL 'channel'];
START SLAVE [FOR CHANNEL 'channel'];

參考