本節說明在 MySQL 9.0 中設定和啟動基於 GTID 的複製的流程。這是一個「冷啟動」程序,假設您是第一次啟動來源伺服器,或者可以停止它;有關使用 GTID 從執行中的來源伺服器佈建副本的資訊,請參閱第 19.1.3.5 節,「使用 GTID 進行容錯移轉和擴充」。有關在線上伺服器上變更 GTID 模式的資訊,請參閱第 19.1.4 節,「在線上伺服器上變更 GTID 模式」。
此啟動程序中,最簡單的 GTID 複製拓撲(由一個來源和一個副本組成)的關鍵步驟如下
如果複製已在執行中,請將兩個伺服器設為唯讀以同步它們。
停止兩個伺服器。
重新啟動兩個伺服器,啟用 GTID 並設定正確的選項。
稍後在本節的範例中會討論以描述的方式啟動伺服器所需的mysqld選項。
指示副本使用來源作為複製資料來源,並使用自動定位。稍後在本節的範例中會說明完成此步驟所需的 SQL 陳述式。
進行新的備份。不含 GTID 的交易的二進制日誌無法在啟用 GTID 的伺服器上使用,因此在此時間點之前建立的備份無法與新的設定一起使用。
啟動副本,然後停用兩個伺服器上的唯讀模式,使其可以接受更新。
在下列範例中,兩個伺服器已在使用 MySQL 的基於二進制日誌位置的複製協定做為來源和副本執行。如果您是從新的伺服器開始,請參閱第 19.1.2.3 節,「建立用於複製的使用者」,以取得關於為複製連線新增特定使用者的資訊;並參閱第 19.1.2.1 節,「設定複製來源設定」,以取得關於設定server_id
變數的資訊。下列範例顯示如何將mysqld啟動選項儲存在伺服器的選項檔案中,如需更多資訊,請參閱第 6.2.2.2 節,「使用選項檔案」。或者,您可以在執行mysqld時使用啟動選項。
接下來的大部分步驟都需要使用 MySQL root
帳戶或其他具有 SUPER
權限的 MySQL 使用者帳戶。mysqladmin shutdown
命令需要 SUPER
權限或 SHUTDOWN
權限。
步驟 1:同步伺服器。 這個步驟只有在處理已經在不使用 GTID 的情況下進行複製的伺服器時才需要。對於新的伺服器,請直接跳到步驟 3。透過將每個伺服器上的 read_only
系統變數設定為 ON
,使伺服器進入唯讀模式,執行以下指令:
mysql> SET @@GLOBAL.read_only = ON;
等待所有正在進行中的交易提交或回滾。然後,讓複本追上來源伺服器。確保複本已處理所有更新,然後再繼續,這一點非常重要。
如果您將二進位日誌用於複製以外的用途,例如執行時間點備份和還原,請等待直到您不再需要包含沒有 GTID 的交易的舊二進位日誌。理想情況下,請等待伺服器清除所有二進位日誌,並等待任何現有的備份過期。
務必了解,包含沒有 GTID 的交易的日誌,不能在已啟用 GTID 的伺服器上使用。在繼續之前,您必須確保拓撲結構的任何地方都沒有沒有 GTID 的交易。
步驟 2:停止兩台伺服器。 使用 mysqladmin 停止每台伺服器,如下所示,其中 username
是具有足夠權限關閉伺服器的 MySQL 使用者名稱
$> mysqladmin -uusername -p shutdown
然後在提示符號處輸入此使用者的密碼。
步驟 3:啟用 GTID 後啟動兩台伺服器。 要啟用基於 GTID 的複製,必須在啟動每台伺服器時啟用 GTID 模式,將 gtid_mode
變數設定為 ON
,並啟用 enforce_gtid_consistency
變數,以確保只有對基於 GTID 的複製安全的操作才會被記錄。例如:
gtid_mode=ON
enforce-gtid-consistency=ON
使用 --skip-replica-start
啟動每個複本。有關 GTID 相關選項和變數的更多資訊,請參閱 第 19.1.6.5 節,「全域交易 ID 系統變數」。
使用 mysql.gtid_executed 表格時,並非一定要啟用二進位日誌才能使用 GTID。來源伺服器必須始終啟用二進位日誌,才能進行複製。但是,複本伺服器可以使用 GTID,但不需要使用二進位日誌。如果需要在複本伺服器上停用二進位日誌,可以為複本指定 --skip-log-bin
和 --log-replica-updates=OFF
選項。
步驟 4:設定複本以使用基於 GTID 的自動定位。 告知複本使用具有基於 GTID 的交易的來源作為複製資料來源,並使用基於 GTID 的自動定位,而不是基於檔案的定位。在複本上執行 CHANGE REPLICATION SOURCE TO
,在語句中加入 SOURCE_AUTO_POSITION
選項,告知複本來源伺服器的交易由 GTID 識別。
您可能還需要為來源伺服器的主機名稱和連接埠號碼,以及可供複本用來連線到來源伺服器的複製使用者帳戶的使用者名稱和密碼提供適當的值;如果這些值已在步驟 1 之前設定,而且不需要進一步變更,則可以安全地從此處所示的語句中省略對應的選項。
mysql> CHANGE REPLICATION SOURCE TO
> SOURCE_HOST = host,
> SOURCE_PORT = port,
> SOURCE_USER = user,
> SOURCE_PASSWORD = password,
> SOURCE_AUTO_POSITION = 1;
步驟 5:進行新的備份。 在您啟用 GTID 之前進行的現有備份,在您啟用 GTID 後將無法在這些伺服器上使用。在此時進行新的備份,以確保您沒有無法使用的備份。
例如,您可以在執行備份的伺服器上執行 FLUSH LOGS
。然後明確地進行備份,或等待您可能設定的任何定期備份常式的下一次迭代。
步驟 6:啟動複本並停用唯讀模式。 像這樣啟動複本:
mysql> START REPLICA;
只有在步驟 1 中將伺服器設定為唯讀模式時,才需要執行以下步驟。要允許伺服器再次開始接受更新,請執行以下語句:
mysql> SET @@GLOBAL.read_only = OFF;
基於 GTID 的複製現在應該正在執行,您可以像以前一樣開始(或繼續)在來源伺服器上進行活動。第 19.1.3.5 節,「使用 GTID 進行容錯移轉和擴展」,討論在使用 GTID 時建立新的複本。