核心命令模板
mysqldump [選項] -h主機 -u用戶 -p密碼 資料庫 [表...] > 輸出檔
mysql [選項] -h主機 -u用戶 -p密碼 資料庫 < 輸入檔
常用備份場景
| 場景 | 命令範例 | 說明 |
| 單庫完整備份 | mysqldump -h localhost -u root -p db1 > db1.sql | 含結構+資料 |
| 帶 DROP TABLE(覆蓋還原) | mysqldump --add-drop-table -u root -p db1 > db1.sql | 還原前自動刪表 |
| 單表/多表備份 | mysqldump -u root -p db1 t1 t2 > t1_t2.sql | 指定表名 |
| 多庫備份 | mysqldump -u root -p --databases db1 db2 > multi.sql | 含 CREATE DATABASE |
| 全例備份 | mysqldump -u root -p --all-databases > all.sql | 含 mysql 系統庫 |
| 僅結構(無資料) | mysqldump --no-data --databases db1 db2 > schema.sql | DDL only |
| 壓縮備份(管道) | mysqldump -u root -p db1 | gzip > db1.sql.gz | 節省 70%+ 空間 |
| 排除特定表 | mysqldump -u root -p db1 --ignore-table=db1.log_table > db1.sql | 5.6+ 支援 |
還原與遷移
基本還原
mysql -h localhost -u root -p db1 < db1.sql
壓縮檔直接還原(免解壓)
gunzip < db1.sql.gz | mysql -u root -p db1
跨伺服器直接遷移(管道流式,無中間檔)
mysqldump -u root -p db1 | mysql -h target_ip -u root -p -C db1
-C 啟用壓縮協議,低頻寬環境加速
- 目標庫需預先建立:
CREATE DATABASE db1 CHARSET utf8mb4;
定時自動化備份腳本範例
#!/bin/bash
# /usr/local/bin/backup_mysql.sh
DATE=$(date +%F_%H%M)
OUT="/backup/mysql/db1_${DATE}.sql.gz"
mysqldump -u backup_user -p'strong_pass' --single-transaction --routines --triggers db1 | gzip > ${OUT}
# 保留 7 天
find /backup/mysql -name "db1_*.sql.gz" -mtime +7 -delete
--single-transaction:InnoDB 熱備份不鎖表
--routines --triggers:包含存儲過程/觸發器/事件
關鍵參數速查
| 參數 | 作用 |
--single-transaction | InnoDB 一致性熱備份(不加鎖) |
--master-data=2 | 輸出 CHANGE MASTER 註解,適合搭建從庫 |
--hex-blob | 二進制欄位以十六進制輸出,避免編碼問題 |
--default-character-set=utf8mb4 | 強制連線編碼,防中文亂碼 |
--quick | 大表分批讀取,避免記憶體暴增 |
--lock-tables=false | MyISAM 不鎖表(配合 --single-transaction 無效) |
驗證備份可用性(必做)
- 檔案大小 > 0、無截斷
head -20 backup.sql 確認 CREATE TABLE/INSERT 結構完整
- 定期在測試環境
mysql < backup.sql 實測還原
- 核對關鍵表行數、檢查和
結語
mysqldump 是 MySQL 最通用的邏輯備份工具。掌握 單交易熱備、壓縮管道、跨機遷移、自動化保留 四大核心模式,並建立「備份 → 驗證 → 演練」閉環,才能在災難發生時從容恢復。