系統整理 mysqldump 七大導出場景、source/管道雙導入法、字符集統一策略、大文件優化技巧、自動化備份腳本模板,直針生產環境痛點。
# 1. 全量備份(數據+結構)
mysqldump -u root -p db_name > full_backup.sql
# 2. 單表備份
mysqldump -u root -p db_name tbl_name > tbl_backup.sql
# 3. 僅結構(-d / --no-data)
mysqldump -u root -p -d --add-drop-table db_name > schema.sql
# 4. 指定字符集導出(跨版本/跨編碼遷移)
mysqldump -u root -p --default-character-set=utf8mb4 --set-charset=gbk db_name > backup.sql
# 5. 多庫並行備份
mysqldump -u root -p --databases db1 db2 db3 > multi.sql
# 6. 熱備份(InnoDB 單事務一致性快照,不鎖表)
mysqldump -u root -p --single-transaction --master-data=2 db_name > hot_backup.sql
# 7. 壓縮備份(節省 70%+ 空間)
mysqldump -u root -p db_name | gzip > backup.sql.gz
| 方式 | 命令 | 適用場景 |
|---|---|---|
| source 命令 | mysql> SOURCE /path/backup.sql; | 交互式、需先建庫/設編碼 |
| 管道導入 | mysql -u root -p db_name < backup.sql | 腳本自動化、CI/CD 流水線 |
| 壓縮直導 | zcat backup.sql.gz | mysql -u root -p db_name | 大文件、省磁盤臨時空間 |
# 臨時關閉檢查
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
SOURCE huge.sql;
SET foreign_key_checks=1;
SET unique_checks=1;
SET autocommit=1;
COMMIT;
#!/bin/bash
# daily_backup.sh - 每日 02:00 執行
BACKUP_DIR=/backup/mysql/$(date +%F)
mkdir -p $BACKUP_DIR
DB_LIST="db1 db2 db3"
for DB in $DB_LIST; do
mysqldump -u backup_user -p'pwd' --single-transaction --master-data=2 \
--routines --triggers --events $DB | gzip > $BACKUP_DIR/${DB}.sql.gz
done
# 保留 7 天
find /backup/mysql -mtime +7 -name "*.gz" -delete
utf8mb4SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, PROCESS, RELOAD