文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  線上停用 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,您現在可以使用正常的降級程序來執行此操作。