為了確保複製檔案的完整性,在 MySQL 副本上備份原始資料檔案應該在副本伺服器關閉時進行。如果 MySQL 伺服器仍在執行中,背景工作可能仍在更新資料庫檔案,特別是那些涉及具有背景處理程序的儲存引擎,例如 InnoDB
。使用 InnoDB
,這些問題應該會在當機復原期間解決,但由於副本伺服器可以在備份過程中關閉,而不會影響來源的執行,因此利用此功能是有意義的。
關閉伺服器並備份檔案的步驟
關閉副本 MySQL 伺服器
$> mysqladmin shutdown
複製資料檔案。您可以使用任何合適的複製或封存公用程式,包括 cp、tar 或 WinZip。例如,假設資料目錄位於目前目錄下,您可以將整個目錄封存如下
$> tar cf /tmp/dbbackup.tar ./data
再次啟動 MySQL 伺服器。在 Unix 下
$> mysqld_safe &
在 Windows 下
C:\> "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqld"
一般來說,您應該備份複本 MySQL 伺服器的整個資料目錄。如果您希望能夠還原資料並作為複本運作(例如,在複本發生故障時),除了資料之外,您還需要有複本的連線中繼資料儲存庫、套用程式中繼資料儲存庫以及中繼日誌檔案。這些項目是為了在還原複本資料後繼續進行複寫所需要的。假設表格已用於複本的連線中繼資料儲存庫和套用程式中繼資料儲存庫(請參閱第 19.2.4 節「中繼日誌和複寫中繼資料儲存庫」),這是 MySQL 8.4 中的預設設定,這些表格會與資料目錄一同備份。如果儲存庫使用的是檔案(已棄用),您必須單獨備份這些檔案。如果中繼日誌檔案放置在與資料目錄不同的位置,則必須單獨備份這些檔案。
如果您遺失了中繼日誌,但仍然擁有 relay-log.info
檔案,您可以檢查此檔案來判斷複寫 SQL 線程在來源伺服器的二進位日誌中已執行到何處。然後,您可以使用 CHANGE REPLICATION SOURCE TO
並搭配 SOURCE_LOG_FILE
和 SOURCE_LOG_POS
選項,告訴複本從該點重新讀取二進位日誌。這需要來源伺服器上仍然存在二進位日誌。
如果您的複本正在複寫 LOAD DATA
陳述式,您也應該備份複本為此目的所使用的目錄中存在的任何 SQL_LOAD-*
檔案。複本需要這些檔案才能繼續複寫任何中斷的 LOAD DATA
操作。此目錄的位置是系統變數 replica_load_tmpdir
的值。如果伺服器啟動時未設定該變數,則目錄位置是 tmpdir
系統變數的值。