文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  線上停用 GTID 交易

19.1.4.3 線上停用 GTID 交易

本節說明如何在已上線的伺服器上停用 GTID 交易。此程序不需要將伺服器離線,適合在生產環境中使用。但是,如果您有可能在停用 GTID 模式時將伺服器離線,該程序會更容易。

此程序類似於在伺服器線上時啟用 GTID 交易,但步驟相反。唯一的區別在於您等待記錄交易複製的時間點。

開始之前,所有伺服器都必須符合以下條件

  • 所有伺服器的 gtid_mode 都設為 ON

  • 任何伺服器都未設定 --replicate-same-server-id 選項。如果此選項與 --log-replica-updates 選項 (預設) 一起設定,且啟用二進位記錄 (也是預設),則無法停用 GTID 交易。在沒有 GTID 的情況下,此選項組合會在循環複製中造成無限迴圈。

  1. 在每個複本上執行以下操作;如果您使用多來源複製,請針對每個通道執行,並包含 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'];
  2. 在每部伺服器上,執行以下陳述式

    SET @@GLOBAL.gtid_mode = ON_PERMISSIVE;
  3. 在每部伺服器上,執行此處顯示的陳述式

    SET @@GLOBAL.gtid_mode = OFF_PERMISSIVE;
  4. 在每部伺服器上,等待 gtid_owned 等於空字串;您可以使用此處顯示的方式檢查

    SELECT @@GLOBAL.gtid_owned;

    在複本上,此值可能會先為空,然後再次變成非空。只要此值至少為空一次,就沒有問題。

  5. 等待目前存在於任何二進位日誌中的所有交易在所有複本上提交。請參閱 第 19.1.4.4 節,「驗證匿名交易的複製」,以了解檢查所有匿名交易是否已複製到所有伺服器的方法之一。

  6. 如果您將二進位日誌用於複製以外的用途 (例如,執行時間點備份或還原),請等待到您不再需要包含 GTID 交易的舊二進位日誌。

    例如,在完成前一個步驟後,您可以在執行備份的伺服器上執行 FLUSH LOGS。然後手動進行備份,或等待您可能已設定的任何定期備份常式的下一次迭代。

    理想情況下,您應該等待伺服器清除前一個步驟 5 完成時存在的所有二進位日誌,並等待在那之前進行的任何備份過期。

    您應該記住,包含 GTID 交易的日誌在下一個步驟之後無法使用。因此,在繼續執行之前,您必須確定拓撲中不存在任何未提交的 GTID 交易。

  7. 在每部伺服器上,執行以下陳述式

    SET @@GLOBAL.gtid_mode = OFF;
  8. 在每台伺服器上,於 my.cnf 中設定 gtid_mode=OFF。您也可以選擇性地設定 enforce_gtid_consistency=OFF;完成後,您也應該將 enforce_gtid_consistency=OFF 加入您的組態檔。

如果您想降級至較早版本的 MySQL,您現在可以使用正常的降級程序進行降級。