Web 介面備份工具(如 phpMyAdmin)受限於 HTTP 超時、內存限制,大數據庫操作極易失敗。本文系統講解 Linux/Windows 命令行下 `mysqldump` 備份與恢復的標準流程、壓縮優化、自動化腳本及跨平台注意事項。
mysqldump -u 用戶名 -p 數據库名 [表名...] > 備份文件.sql
mysql -u 用戶名 -p 數據库名 < 備份文件.sql
# 備份單庫
mysqldump -u mysqluser -p test_db > test_db.sql
# 備份多庫
mysqldump -u mysqluser -p --databases db1 db2 > multi_db.sql
# 備份全庫(含系統庫)
mysqldump -u mysqluser -p --all-databases > full_backup.sql
# 管道壓縮(推薦:節省磁盤、網絡傳輸快)
mysqldump -u mysqluser -p test_db | gzip > test_db_$(date +%Y%m%d_%H%M).sql.gz
# 或者使用 pigz 多核並行壓縮(大數據庫顯著加速)
mysqldump -u mysqluser -p test_db | pigz -p 4 > test_db_$(date +%Y%m%d_%H%M).sql.gz
# 未壓縮文件恢復
mysql -u mysqluser -p test_db < test_db.sql
# 壓縮文件直接恢復(無需先解壓)
gunzip < test_db.sql.gz | mysql -u mysqluser -p test_db
# 或 zcat(部分系統)
zcat test_db.sql.gz | mysql -u mysqluser -p test_db
mysqldump -u mysqluser -p \
--single-transaction \ # InnoDB 一致性非阻塞
--master-data=2 \ # 記錄 Binlog 位點
--routines --triggers --events \ # 存儲過程/觸發器/事件
--hex-blob \ # 二進制字段十六進制
--quick \ # 流式讀取,防大表 OOM
--databases test_db > test_db_$(date +%F).sql
cmd
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin"
# 或根據實際安裝路徑調整
# 導出到指定文件
mysqldump -u root -p voice > D:\backup\voice_%date:~,4%%date:~5,2%%date:~8,2%.sql
# 輸入密碼後開始導出
| 痛點 | 優化方案 | 工具/命令 |
|---|---|---|
| 導出耗時過長 | 並行導出 | mydumper (多線程)、mysqldump 分表導出 |
| 導入極慢 | 禁用索引/外鍵、批量提交 | 導入前 SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0; |
| 文件過大 | 分卷壓縮、增量備份 | split -b 1G backup.sql.gz、xtrabackup 增量 |
| 跨版本遷移 | 兼容性檢查、字符集統一 | mysql_upgrade、--default-character-set=utf8mb4 |
#!/bin/bash
# /opt/scripts/mysql_daily_backup.sh
# 每日 02:00 執行:0 2 * * * /opt/scripts/mysql_daily_backup.sh >> /var/log/mysql_backup.log 2>&1
DB_USER="backup_user"
DB_PASS="StrongPassword123"
BACKUP_BASE="/backup/mysql"
DATE_STR=$(date +%Y%m%d_%H%M)
RETENTION_DAYS=30
mkdir -p ${BACKUP_BASE}/${DATE_STR}
# 核心業務庫單獨備份(便於單庫恢復)
for db in core_db user_db order_db; do
mysqldump -u${DB_USER} -p${DB_PASS} \
--single-transaction --master-data=2 \
--routines --triggers --events \
--hex-blob --quick \
${db} | pigz -p 4 > ${BACKUP_BASE}/${DATE_STR}/${db}.sql.gz
done
# 全庫備份(災難恢復用)
mysqldump -u${DB_USER} -p${DB_PASS} \
--single-transaction --master-data=2 \
--routines --triggers --events \
--all-databases | pigz -p 4 > ${BACKUP_BASE}/${DATE_STR}/full_instance.sql.gz
# 清理舊備份
find ${BACKUP_BASE} -type f -name "*.gz" -mtime +${RETENTION_DAYS} -delete
# 異地同步(可選)
# rsync -avz ${BACKUP_BASE}/ offsite_server:/offsite/mysql_backup/
命令行 `mysqldump` 是 MySQL DBA 的核心基本功。掌握 壓縮管道、一致性參數、大庫優化、自動化腳本、驗證演練 五大支柱,即可應對從 MB 到 TB 級別的備份恢復場景。記住:備份的價值不在於「備」了多少,而在於「份」能不能還原。