mysqlhotcopy 是 Perl 腳本工具,利用 FLUSH TABLES WITH READ LOCK + 拷貝文件實現 **MyISAM 表** 的熱備份。**不支持 InnoDB**(無法保證事務一致性)。MySQL 5.7+ 已移除,僅適用 5.6 及以下 MyISAM 存量系統。本文記錄安裝依賴、使用參數、遷移實戰、替代方案。
# CentOS/RHEL
yum -y install perl-DBI perl-DBD-MySQL
# 或源碼安裝 DBD::mysql
wget https://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.050.tar.gz
tar zxvf DBD-mysql-4.050.tar.gz
cd DBD-mysql-4.050
perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
make && make install
mysqlhotcopy [options] db_name [/path/to/backup_dir]
# 常用選項
--user=root --password=xxx --host=localhost --port=3306
--regexp='^tbl_' # 正則匹配表名
--suffix=_backup # 備份目錄後綴
--method=cp # 拷貝方式:cp/scp/rsync
--keep-old # 保留舊備份
--flushlog # 備份前 FLUSH LOGS
--noindices # 不備份索引文件(僅 .MYD/.frm)
--quiet # 靜默模式
# 1. 備份整個庫
/usr/bin/mysqlhotcopy --user=root -p'xxx' -h 127.0.0.1 db_name /backup/mysqlhotcopy/
# 2. 備份特定表(正則)
/usr/bin/mysqlhotcopy --user=root -p'xxx' db_name /backup/ --regexp='^order_'
# 3. 異機備份
/usr/bin/mysqlhotcopy --user=root -p'xxx' db_name /backup/ --method=scp --host=backup_server
# 4. 只備份數據文件(不含索引,恢復後需 REPAIR TABLE)
/usr/bin/mysqlhotcopy --user=root -p'xxx' db_name /backup/ --noindices
| 限制 | 影響 |
|---|---|
| 僅支持 MyISAM / ARCHIVE | InnoDB 表會被跳過或報錯,無法熱備份 |
| 需 FLUSH TABLES WITH READ LOCK | 全局讀鎖,備份期間**所有寫入阻塞** |
| 本地文件系統拷貝 | 跨機需 scp/rsync,網絡慢影響鎖持有時間 |
| 不支持壓縮/加密 | 備份文件體積大、明文 |
| MySQL 5.7+ 已移除 | 不可用於新版本 |
| 無增量備份 | 每次全量 |
# 1. 目標機器創建同名庫
mysql -u root -p -e "CREATE DATABASE db_name CHARACTER SET utf8mb4;"
# 2. 停止目標 MySQL(或確保無寫入)
systemctl stop mysqld
# 3. 拷貝備份文件到 datadir
cp -r /backup/mysqlhotcopy/db_name/* /var/lib/mysql/db_name/
chown -R mysql:mysql /var/lib/mysql/db_name/
# 4. 啟動 MySQL
systemctl start mysqld
# 5. 檢查表(MyISAM 可能需修復)
mysql -u root -p -e "CHECK TABLE db_name.tbl_name;"
mysql -u root -p -e "REPAIR TABLE db_name.tbl_name;" # 若損壞
| 工具 | 引擎支持 | 熱備份 | 增量 | 壓縮 | 並行 | 適用版本 |
|---|---|---|---|---|---|---|
| Percona XtraBackup | InnoDB/MyISAM | ✅ | ✅ | ✅ | ✅ | 5.5+ |
| MySQL Enterprise Backup | InnoDB/MyISAM | ✅ | ✅ | ✅ | ✅ | 商業版 |
| mysqldump --single-transaction | InnoDB | ✅ (邏輯) | ❌ | ✅ | ❌ | 5.0+ |
| mydumper/myloader | InnoDB/MyISAM | ✅ (邏輯) | ❌ | ✅ | ✅ | 5.5+ |
mysqlhotcopy 是 MyISAM 時代的產物,**已棄用**。存量 MyISAM 系統請儘快遷移至 InnoDB + XtraBackup/meb/mydumper 現代備份體系。若必須維護舊系統,嚴格限制備份窗口、監控鎖持有時間、異地存儲備份文件。