# 基礎備份 (單庫)
mysqldump -h host -u user -p dbname > backup.sql
# 帶 DROP TABLE (覆蓋式還原)
mysqldump --add-drop-table -u user -p dbname > backup.sql
# 壓縮備份 (管線)
mysqldump -h host -u user -p dbname | gzip > backup.sql.gz
# 指定表備份
mysqldump -h host -u user -p dbname tbl1 tbl2 > backup.sql
# 多庫同時備份
mysqldump --databases db1 db2 db3 > multi.sql
# 僅結構 (無資料)
mysqldump --no-data --databases db1 db2 > structure.sql
# 全例項備份
mysqldump --all-databases > all.sql
# 基礎還原
mysql -h host -u user -p dbname < backup.sql
# 解壓還原
gunzip < backup.sql.gz | mysql -u user -p dbname
# bzip2 版本
mysqldump ... | bzip2 > backup.sql.bz2
bunzip2 < backup.sql.bz2 | mysql ...
mysqldump -u user -p dbname | mysql --host=target_host -C dbname
-C 啟用壓縮傳輸,跨網段遷移極大加速。| 參數 | 用途 |
|---|---|
--single-transaction | InnoDB 熱備份,不鎖表 (必加) |
--master-data=2 | 記錄 Binlog 位點 (註釋形式),搭建從庫必備 |
--routines --triggers --events | 包含存儲過程/觸發器/事件 |
--hex-blob | 二進制欄位十六進制導出,避免編碼問題 |
--quick | 大表流式讀取,避免記憶體暴漲 |
--skip-lock-tables | 不鎖表 (配合 single-transaction) |
--where="id>100" | 條件導出分片備份 |
--default-character-set=utf8mb4 | 強制連接編碼,防亂碼 |
#!/bin/bash
BACKUP_DIR="/backup/mysql/$(date +%F)"
mkdir -p $BACKUP_DIR
mysqldump --single-transaction --master-data=2 \
--routines --triggers --events \
--hex-blob --quick \
--default-character-set=utf8mb4 \
-u backup_user -p'strong_pass' \
--databases db1 db2 db3 \
| gzip > $BACKUP_DIR/databases_$(date +%H%M).sql.gz
# 保留 7 天
find /backup/mysql -type f -mtime +7 -delete
CHECKSUM TABLE 對比源/目標表檢驗和。SELECT COUNT(*) 核心表行數一致性。mysqldump 參數組合決定備份品質。**生產必加**:--single-transaction --master-data=2 --routines --triggers --events --hex-blob --quick。配合管線壓縮、跨機直傳、保留策略,構建「備份可用、還原可驗、RPO/RTO 可控」的資料保護體系。