為了設定複本從正確的點開始複製程序,您需要記下來源在其二進位日誌中的目前坐標。
此程序使用 FLUSH TABLES WITH READ LOCK
,這會封鎖 COMMIT
操作以用於 InnoDB
資料表。
如果您計劃關閉來源以建立資料快照,您可以選擇跳過此程序,並改為儲存二進位日誌索引檔的副本以及資料快照。在這種情況下,來源會在重新啟動時建立新的二進位日誌檔。因此,複本必須開始複製程序的來源二進位日誌坐標是新檔案的開頭,也就是複製的二進位日誌索引檔中所列檔案之後的來源上的下一個二進位日誌檔。
若要取得來源二進位日誌坐標,請遵循下列步驟
透過使用命令列用戶端連線到來源來開始來源上的工作階段,並執行
FLUSH TABLES WITH READ LOCK
陳述式來刷新所有資料表並封鎖寫入陳述式mysql> FLUSH TABLES WITH READ LOCK;
警告讓您發出
FLUSH TABLES
陳述式的用戶端保持執行狀態,以便讀取鎖定保持有效。如果您結束用戶端,則鎖定會被釋放。在來源上的不同工作階段中,使用
SHOW BINARY LOG STATUS
陳述式來判斷目前的二進位日誌檔名和位置mysql> SHOW BINARY LOG STATUS\G *************************** 1. row *************************** File: mysql-bin.000003 Position: 73 Binlog_Do_DB: test Binlog_Ignore_DB: manual, mysql Executed_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 1 row in set (0.00 sec)
File
欄會顯示日誌檔的名稱,而Position
欄會顯示檔案內的位置。在此範例中,二進位日誌檔是mysql-bin.000003
,而位置是 73。記錄這些值。您稍後在設定複本時會需要它們。它們代表複本應開始處理來自來源的新更新的複製坐標。如果來源先前在停用二進位日誌的情況下執行,則
SHOW BINARY LOG STATUS
或 mysqldump--source-data
所顯示的日誌檔名和位置值會是空的。在這種情況下,當您稍後指定來源的二進位日誌檔和位置時,您需要使用的值會是空字串 (''
) 和4
。
您現在已具備所需的資訊,可以啟用複本從來源的二進位日誌中正確的位置開始讀取,以開始複製。
下一步取決於您在來源上是否已存在資料。請選擇以下選項之一
如果您有需要與複本同步的現有資料,再開始複製程序,請保持用戶端執行,以便鎖定仍然存在。這可以防止進行任何進一步的變更,確保複製到複本的資料與來源同步。請繼續前往第 19.1.2.5 節,「選擇資料快照的方法」。
如果您正在設定新的來源和複本組合,您可以結束第一個工作階段來釋放讀取鎖定。請參閱第 19.1.2.6.1 節,「使用新的來源和複本設定複製」,瞭解如何繼續。