方案一:檔案級直接複製
操作步驟
- 停止寫入或鎖定表:
FLUSH TABLES WITH READ LOCK;
- 複製
datadir 下對應資料庫目錄
- 釋放鎖定:
UNLOCK TABLES;
- 目標機同路徑貼上,重啟或
FLUSH TABLES;
優缺點
| 優點 | 缺點 |
| 速度極快(僅檔案複製) | 需停寫或鎖表,影響可用性 |
| 無 SQL 解析開銷 | 源目標版本、架構、參數必須完全一致 |
| 適合大型資料庫冷備份 | InnoDB 需複製 ibdata、redo log、undo tablespace 等系統檔 |
| 無法跨版本、跨引擎、跨平台遷移 |
方案二:mysqldump 邏輯備份
基本用法
# 全庫備份
mysqldump -u root -p --single-transaction --routines --triggers --events db_name > backup.sql
# 指定表
mysqldump -u root -p db_name tbl1 tbl2 > backup.sql
# 壓縮輸出
mysqldump -u root -p db_name | gzip > backup.sql.gz
關鍵參數
--single-transaction:InnoDB 熱備份不鎖表(需可重複讀隔離級)
--quick:串流讀取不緩存全表結果,減少記憶體
--extended-insert:多列合併 INSERT,縮小檔案、加速還原
--master-data=2:記錄 binlog 位點,支援主從搭建
--set-gtid-purged=ON:GTID 模式備份
還原
mysql -u root -p db_name < backup.sql
# 或壓縮檔
gunzip < backup.sql.gz | mysql -u root -p db_name
企業級備份策略建議
| 層級 | 工具 | 頻率 | 保留 | 用途 |
| 全量 | mysqldump / Percona XtraBackup | 每日 | 7-30 天 | 災難恢復、遷移 |
| 增量 | binlog / XtraBackup --incremental | 每小時 | 24-48 小時 | 時間點恢復 (PITR) |
| 邏輯 | mysqldump --where | 每週 | 長期 | 審計、合規、跨版本 |
XtraBackup 物理熱備份(生產環境首選)
# 全量備份
xtrabackup --backup --target-dir=/backup/full --user=root --password
# 準備(replay redo log)
xtrabackup --prepare --target-dir=/backup/full
# 還原
systemctl stop mysql
rsync -av /backup/full/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
優點:不鎖表、支援增量、還原快、官方維護。