備份是數據庫生存線。本文從原理、適用引擎、熱/冷、增量、跨版本、恢復 RTO 六個維度,對比 6 大主流備份體系,並給出 InnoDB/MyISAM 差異化策略、企業級策略模板與避坑清單。
| 體系 | 類型 | 引擎 | 熱備 | 增量 | 跨版本 | 速度 | 核心工具/命令 |
|---|---|---|---|---|---|---|---|
| mysqldump | 邏輯 SQL | 全 | ✓ (鎖/事務) | ✗ (配合 Binlog) | ✓ 最佳 | 中 | mysqldump |
| mysqlhotcopy | 物理文件 | MyISAM | ✓ (鎖表) | ✗ | ✗ | 極快 | mysqlhotcopy (Perl) |
| BACKUP TABLE | 物理文件 | MyISAM | ✓ | ✗ | ✗ | 快 | SQL: BACKUP TABLE |
| SELECT INTO OUTFILE | 邏輯文本 | 全 | ✗ (需鎖) | ✗ | ✓ (文本) | 中 | SQL: SELECT INTO OUTFILE |
| 二進制日志 | 增量事件 | 全 | ✓ | ✓ 原生 | ✗ (同版本) | 極快 | mysqlbinlog + FLUSH LOGS |
| 文件拷貝 (cp/rsync) | 物理文件 | 全 | ✗ (需全局鎖) | ✗ (rsync 偽增量) | ✗ (同架構) | 極快 | FLUSH TABLES WITH READ LOCK + cp/rsync |
| XtraBackup (補充) | 物理頁 | InnoDB/MyISAM | ✓ 無鎖 | ✓ | ✗ | 極快 | xtrabackup --backup |
mysqldump -u$U -p$P \
--default-character-set=utf8mb4 \
--single-transaction \
--triggers -R --hex-blob \
--master-data=2 \
db_name > db_name.sql
--single-transaction:一致性快照,不阻塞寫入 (InnoDB 專屬)。--master-data=2:輸出 Binlog 位置為註釋,不加鎖;=1 為可執行 CHANGE MASTER。--hex-blob:二進制列安全導出。mysql -u$U -p$P db_name < db_name.sql
# 或客戶端內
SOURCE /path/db_name.sql;
mysqlhotcopy -u$U -p$P -q db_name /backup/dir/
# 正則批量
mysqlhotcopy -u$U -p$P -q "db_name./regex/" /backup/dir/
還原:cp -rf /backup/dir/db_name /var/lib/mysql/ && chown -R mysql:mysql ...
-- BACKUP TABLE (僅結構+數據,無索引,恢復慢,不推薦新項目)
BACKUP TABLE tbl TO '/backup/db/';
-- SELECT INTO OUTFILE (文本導出,適合 ETL/異構)
SELECT * INTO OUTFILE '/backup/db/tbl.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n' FROM tbl;
還原:LOAD DATA INFILE ... REPLACE/IGNORE。
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
FLUSH LOGS; -- 切換新 binlog
cp /var/lib/mysql/mysql-bin.00000X /backup/binlog/
mysqlbinlog --start-datetime="..." --stop-datetime="..." \
/backup/binlog/mysql-bin.00000X | mysql -u$U -p$P db_name
FLUSH TABLES WITH READ LOCK;
rsync -avz /var/lib/mysql/ /backup/mysql_$(date +%F)/
UNLOCK TABLES;
InnoDB 必備份: ibdata*、ib_logfile*、*.ibd。
rsync -avz --delete /var/lib/mysql/ backup_user@backup_srv::mysql_backup/
注意:rsync 基於 mtime/size,**不保證邏輯一致性**,僅適用於只讀副本同步或冷備份歸檔。
| 場景 | MyISAM | InnoDB |
|---|---|---|
| 全量熱備 | mysqlhotcopy (極快) | mysqldump --single-transaction / XtraBackup |
| 增量備份 | Binlog (需啟用) | Binlog / XtraBackup --incremental |
| 異構遷移 | mysqldump / SELECT INTO OUTFILE | mysqldump |
| 單表恢復 | 文件級 cp 秒級 | 需邏輯導入或 XtraBackup --export |
| 級別 | 全量 | 增量 | 異地 | 驗證 | 工具鏈 |
|---|---|---|---|---|---|
| 核心 (RPO<1min) | XtraBackup 每日 | Binlog 實時流式 (Kafka/S3) | 跨可用區/跨地域 | 每日自動恢復演練 | XtraBackup + Binlog + 監控告警 |
| 重要 (RPO<1h) | mysqldump 每日 | XtraBackup 每 4h / Binlog 歸檔 | 跨機房 | 每周演練 | mysqldump + XtraBackup |
| 一般 (RPO<24h) | mysqldump 每周 | mysqldump 每日 | 對象存儲 | 月度抽樣 | mysqldump |
--quick (含於 --opt)。utf8mb4。GTID_PURGED 衝突。--all-databases 或額外導出 mysql 庫。expire_logs_days + 監控磁盤。RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT。備份體系分層:物理全量 (XtraBackup/文件) + 邏輯增量 (Binlog) + 異地歸檔 (rsync/S3) + 定期演練。小庫用 mysqldump,大庫上 XtraBackup,核心業務必上 Binlog 流式備份 + PITR。工具選型服務於 RPO/RTO,而非倒置。