若要設定副本從正確的位置開始複製程序,您需要記下來源在其二進制日誌中的目前座標。
此程序使用 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 節,使用新的來源和複本設定複寫」瞭解如何繼續。