本節總結了一些進行備份的通用方法。
使用 MySQL Enterprise Backup 進行熱備份
MySQL 企業版的客戶可以使用 MySQL Enterprise Backup 產品,對整個執行個體或選定的資料庫、資料表或兩者進行實體備份。此產品包含 增量和壓縮備份的功能。備份實體資料庫檔案比使用 mysqldump
命令等邏輯技術還原速度快得多。InnoDB
資料表是使用熱備份機制複製的。(理想情況下,InnoDB
資料表應代表大多數資料。)來自其他儲存引擎的資料表是使用溫備份機制複製的。如需 MySQL Enterprise Backup 產品的概述,請參閱第 32.1 節「MySQL Enterprise Backup 概述」。
使用 mysqldump 進行備份
mysqldump 程式可以進行備份。它可以備份所有類型的資料表。(請參閱第 9.4 節「使用 mysqldump 進行備份」。)
對於 InnoDB
資料表,可以使用 --single-transaction
選項到 mysqldump 執行不鎖定資料表的線上備份。請參閱第 9.3.1 節「建立備份政策」。
透過複製資料表檔案進行備份
可以透過複製資料表檔案(*.MYD
、*.MYI
檔案和相關的 *.sdi
檔案)來備份 MyISAM 資料表。若要取得一致的備份,請停止伺服器或鎖定並刷新相關資料表。
FLUSH TABLES tbl_list WITH READ LOCK;
您只需要讀取鎖定;這可讓其他用戶端在您複製資料庫目錄中的檔案時繼續查詢資料表。需要刷新以確保所有作用中的索引頁面在您開始備份之前都寫入磁碟。請參閱第 15.3.6 節「LOCK TABLES 和 UNLOCK TABLES 陳述式」和第 15.7.8.3 節「FLUSH 陳述式」。
您也可以直接複製資料表檔案來建立二進制備份,只要伺服器沒有更新任何內容即可。(但請注意,如果您的資料庫包含 InnoDB
資料表,則資料表檔案複製方法不起作用。此外,即使伺服器沒有主動更新資料,InnoDB
可能仍有修改的資料快取在記憶體中,而未刷新到磁碟。)
如需此備份方法的範例,請參閱第 15.2.6 節「IMPORT TABLE 陳述式」中的匯出和匯入範例。
建立分隔文字檔案備份
若要建立包含資料表資料的文字檔案,您可以使用 SELECT * INTO OUTFILE '
。檔案會在 MySQL 伺服器主機上建立,而不是用戶端主機上。對於此陳述式,輸出檔案不能已存在,因為允許覆寫檔案會構成安全風險。請參閱第 15.2.13 節「SELECT 陳述式」。此方法適用於任何類型的資料檔案,但僅儲存資料表資料,而不儲存資料表結構。file_name
' FROM tbl_name
建立文字資料檔案(以及包含備份資料表的 CREATE TABLE
陳述式的檔案)的另一種方法是使用具有 --tab
選項的 mysqldump。請參閱第 9.4.3 節「使用 mysqldump 以分隔文字格式傾印資料」。
若要重新載入分隔文字資料檔案,請使用 LOAD DATA
或 mysqlimport。
透過啟用二進制日誌進行增量備份
MySQL 支援使用二進制日誌進行增量備份。二進制日誌檔案會提供您需要的資訊,以將備份執行之後對資料庫所做的變更複製到資料庫。因此,為了讓伺服器還原到時間點,必須在其上啟用二進制記錄,這是 MySQL 9.0 的預設設定;請參閱第 7.4.4 節「二進制日誌」。
當您想要進行增量備份(包含自上次完整或增量備份以來的所有變更)時,您應該使用 FLUSH LOGS
來輪換二進位日誌。完成此操作後,您需要將所有二進位日誌複製到備份位置,這些日誌的範圍從上次完整或增量備份的時間點到倒數第二個日誌。這些二進位日誌就是增量備份;在還原時,您應按照第 9.5 節「時間點(增量)復原」中的說明來套用它們。下次執行完整備份時,您也應該使用 FLUSH LOGS
或 mysqldump --flush-logs 來輪換二進位日誌。請參閱第 6.5.4 節「mysqldump — 資料庫備份程式」。
使用複本進行備份
如果在進行備份時伺服器出現效能問題,一種可能有幫助的策略是設定複寫,並在複本上執行備份,而不是在來源上執行。請參閱第 19.4.1 節「使用複寫進行備份」。
如果您正在備份複本,無論您選擇哪種備份方法,都應該在備份複本的資料庫時備份其連線中繼資料儲存庫和套用程式中繼資料儲存庫(請參閱第 19.2.4 節「中繼日誌和複寫中繼資料儲存庫」)。還原複本的資料後,始終需要這些資訊才能恢復複寫。如果您的複本正在複寫 LOAD DATA
陳述式,您也應該備份複本用於此目的的目錄中的任何 SQL_LOAD-*
檔案。複本需要這些檔案來恢復任何中斷的 LOAD DATA
操作的複寫。此目錄的位置是系統變數 replica_load_tmpdir
的值。如果伺服器在啟動時未設定該變數,則目錄位置是 tmpdir
系統變數的值。
復原損壞的資料表
如果您必須還原已損壞的 MyISAM
資料表,請先嘗試使用 REPAIR TABLE
或 myisamchk -r 來復原它們。這應該在 99.9% 的情況下都有效。如果 myisamchk 失敗,請參閱第 9.6 節「MyISAM 資料表維護和當機復原」。
使用檔案系統快照進行備份
如果您使用的是 Veritas 檔案系統,您可以這樣進行備份
從用戶端程式,執行
FLUSH TABLES WITH READ LOCK
。從另一個 shell,執行
mount vxfs snapshot
。從第一個用戶端,執行
UNLOCK TABLES
。從快照複製檔案。
卸載快照。
類似的快照功能可能在其他檔案系統中可用,例如 LVM 或 ZFS。