免費備份工具對比
| 工具/方式 | 適用引擎 | 熱備 | 增量 | 跨版本 | 備註 |
| mysqldump | 全引擎 | 單事務表熱備 | 配合 --master-data | 佳 | SQL 級別,最通用 |
| mysqlhotcopy | 僅 MyISAM | 需鎖表 | 不支援 | 差 | Perl 腳本,僅 Unix/NetWare,速度最快 |
| BACKUP TABLE | 僅 MyISAM | 鎖表拷貝文件 | 不支援 | 差 | 不備份索引,恢復慢,不推薦 |
| SELECT INTO OUTFILE | 全引擎 | 鎖表導出文本 | 不支援 | 中 | 自定義分隔符,便於異構導入 |
| Binlog (FLUSH LOGS) | 全引擎 | 熱備 | 原生支援 | 中 | 增量備份首選,配合主從架構 |
| 直接拷貝數據目錄 | 全引擎 | 需 FTWRL | 不支援 | 差 | 最快,InnoDB 需連帶 ib_logfile* |
mysqldump 核心參數精選
# MyISAM 表
mysqldump -u user -p --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x db > db.sql
# InnoDB 表(單事務一致性)
mysqldump -u user -p --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db > db.sql
# 適合搭建從庫(含 Binlog 位點)
mysqldump -u user -p --default-character-set=utf8 --opt --master-data=1 --single-transaction --flush-logs db > db.sql
恢復方式
mysql -u user -p db < db.sql
- MySQL 客戶端內:
SOURCE /path/db.sql;(需絕對路徑、mysqld 進程用戶可讀)
Binlog 增量備份與恢復
# 開啟 Binlog (my.cnf)
server-id=1
log-bin=binlog
log-bin-index=binlog.index
# 切換 Binlog 產生增量文件
FLUSH LOGS;
# 查看 Binlog
mysqlbinlog /var/lib/mysql/binlog.000001
# 恢復
mysqlbinlog /var/lib/mysql/binlog.000001 | mysql -u user -p db
備份策略建議
- 中等業務:首次全量,每日增量,每周全量。
- 核心高併發:每日全量,每小時增量,甚至更頻。
- 最佳實踐:主從復制 + 從庫備份,零影響主庫,可異地存儲。
數據維護與災難恢復
- MyISAM:
CHECK/REPAIR/OPTIMIZE/ANALYZE TABLE 或 myisamchk。
- InnoDB:
ALTER TABLE t ENGINE=InnoDB 整理碎片;innodb_force_recovery=1..6 啟動時強制恢復(慎用)。