首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 熱拷貝備份實戰:mysqlhotcopy 工具操作與 MyISAM 限制詳解

     編輯:MySQL 資料庫相關知識

什麼是熱拷貝?

熱拷貝 是指在 MySQL 服務持續運行狀態下,直接複製資料檔案進行備份。它與 mysqldump 熱備份的最大差異在於:

  • mysqldump 邏輯備份:輸出 SQL 敘述,適用所有儲存引擎,但速度較慢。
  • mysqlhotcopy 物理備份:直接複製 .frm、.MYD、.MYI 檔案,速度極快,僅支援 MyISAM 引擎。

重要限制: mysqlhotcopy 無法備份 InnoDB 表格。生產環境若以 InnoDB 為主,請改用 mysqldump --single-transaction 或 Percona XtraBackup。

實戰操作流程(CentOS 6 / MySQL 5.5 示範)

步驟 1:安裝 Perl 相依套件

mysqlhotcopy 為 Perl 腳本,需安裝 DBI 模組:

yum install perl-DBI perl-DBD-MySQL -y

步驟 2:執行熱拷貝

# 語法:mysqlhotcopy -u <用戶> -p<密碼> <資料庫名> <備份目標目錄>
mysqlhotcopy -u root -p123456 larrydb /databackup/

成功輸出範例:

Flushed 2 tables with read lock (`larrydb`.`class`, `larrydb`.`stu`) in 0 seconds.
Locked 0 views () in 0 seconds.
Copying 5 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 2 tables (5 files) in 0 seconds (0 seconds overall).

步驟 3:模擬資料遺失與還原

# 1. 刪除資料表(模擬災難)
mysql -uroot -p123456 -e "DROP TABLE larrydb.class, larrydb.stu;"

# 2. 還原:直接複製檔案回資料目錄
cp -arvf /databackup/larrydb /usr/local/mysql/data/

# 3. 若為 InnoDB 表(class),需額外匯入 .sql 結構檔
mysql -uroot -p123456 < larrydb.sql

熱拷貝架構示意圖

關鍵觀察與驗證

表格引擎熱拷貝結果說明
stuMyISAM✅ 完整還原.MYD/.MYI 直接複製即可
classInnoDB❌ 僅結構資料需透過 .sql 匯入

適用場景與替代方案

  • 適用: 純 MyISAM 環境、唯讀報表庫、臨時快速備份需求。
  • 不適用: InnoDB 混合環境、需時間點恢復(PITR)、跨版本遷移。
  • 現代替代: Percona XtraBackup 支援 InnoDB 熱備份、增量備份、壓縮、加密,為目前生產環境首選工具。

總結: mysqlhotcopy 雖快但侷限於 MyISAM。理解其原理(FLUSH TABLES WITH READ LOCK + 檔案複製)有助於掌握物理備份本質,但生產環境請優先評估 XtraBackup 等更完整的解決方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved