本節說明如何在已上線的伺服器上停用 GTID 交易。此程序不需要將伺服器離線,適合在生產環境中使用。但是,如果您有可能在停用 GTID 模式時將伺服器離線,該程序會更容易。
此程序類似於在伺服器線上時啟用 GTID 交易,但步驟相反。唯一的區別在於您等待記錄交易複製的時間點。
開始之前,所有伺服器都必須符合以下條件
所有伺服器的
gtid_mode
都設為ON
。任何伺服器都未設定
--replicate-same-server-id
選項。如果此選項與--log-replica-updates
選項 (預設) 一起設定,且啟用二進位記錄 (也是預設),則無法停用 GTID 交易。在沒有 GTID 的情況下,此選項組合會在循環複製中造成無限迴圈。
在每個複本上執行以下操作;如果您使用多來源複製,請針對每個通道執行,並包含
FOR CHANNEL '
子句channel
'STOP REPLICA [FOR CHANNEL 'channel']; CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION = 0, SOURCE_LOG_FILE = file, SOURCE_LOG_POS = position [FOR CHANNEL 'channel']; START REPLICA [FOR CHANNEL 'channel'];
在每部伺服器上,執行以下陳述式
SET @@GLOBAL.gtid_mode = ON_PERMISSIVE;
在每部伺服器上,執行此處顯示的陳述式
SET @@GLOBAL.gtid_mode = OFF_PERMISSIVE;
在每部伺服器上,等待
gtid_owned
等於空字串;您可以使用此處顯示的方式檢查SELECT @@GLOBAL.gtid_owned;
在複本上,此值可能會先為空,然後再次變成非空。只要此值至少為空一次,就沒有問題。
等待目前存在於任何二進位日誌中的所有交易在所有複本上提交。請參閱 第 19.1.4.4 節,「驗證匿名交易的複製」,以了解檢查所有匿名交易是否已複製到所有伺服器的方法之一。
如果您將二進位日誌用於複製以外的用途 (例如,執行時間點備份或還原),請等待到您不再需要包含 GTID 交易的舊二進位日誌。
例如,在完成前一個步驟後,您可以在執行備份的伺服器上執行
FLUSH LOGS
。然後手動進行備份,或等待您可能已設定的任何定期備份常式的下一次迭代。理想情況下,您應該等待伺服器清除前一個步驟 5 完成時存在的所有二進位日誌,並等待在那之前進行的任何備份過期。
您應該記住,包含 GTID 交易的日誌在下一個步驟之後無法使用。因此,在繼續執行之前,您必須確定拓撲中不存在任何未提交的 GTID 交易。
在每部伺服器上,執行以下陳述式
SET @@GLOBAL.gtid_mode = OFF;
在每台伺服器上,於
my.cnf
中設定gtid_mode=OFF
。您也可以選擇性地設定enforce_gtid_consistency=OFF
;完成後,您也應該將enforce_gtid_consistency=OFF
加入您的組態檔。
如果您想降級至較早版本的 MySQL,您現在可以使用正常的降級程序進行降級。