| 類別 | 方法 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| 物理備份 | 直接拷貝檔案 (FLUSH TABLES WITH READ LOCK + tar/cp) | 速度快、恢復快 | 需鎖表、版本/架構強綁定、InnoDB 需備份 ib_logfile* | 小數據庫、維護窗口可接受鎖表 |
| mysqlhotcopy (Perl) | MyISAM 專用、極快 | 僅支援 MyISAM、本機のみ | 純 MyISAM 環境 | |
| 邏輯備份 | mysqldump (SQL 級) | 跨版本遷移、可編輯、工具鏈成熟 | 大庫慢、恢復慢、單線程 | 中小庫、異構遷移、開發測試 |
| mydumper/myloader | 多線程、壓縮、斷點續傳 | 需額外安裝 | 大庫並行備份/恢復首選 | |
| 複制架構 | 主從/主主/半同步/GTID/MGR | 準實時、高可用、讀寫分離 | 架構複雜、非傳統備份替代品 | 核心業務高可用、讀擴展 |
| 自動化 | Shell/Python + crontab / 系統任務 | 靈活、可整合告警、上傳異地 | 需自行維護腳本 | 所有場景 |
mysql> FLUSH TABLES WITH READ LOCK;
# 另開終端
tar zcvf /backup/mysql_$(date +%F).tar.gz /var/lib/mysql
mysql> UNLOCK TABLES;
InnoDB 必備:同步備份 ib_logfile*,否則崩潰恢復不完整。
# 單庫
mysqldump -uroot -p --single-transaction --master-data=2 --routines --triggers dbname > dbname_$(date +%F).sql
# 全庫
mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > all_$(date +%F).sql
# 還原
mysql -uroot -p dbname < dbname_backup.sql
# 或進入 mysql> source /path/backup.sql
#!/bin/bash
# mysql_auto_backup.sh
BAKDIR="/backup/mysql"
MAIL="dba@example.com"
USER="backup_user"
PASSWD="xxxx"
DB="prod_db"
DATE=$(date +%F)
RETENTION=7
[ -d "$BAKDIR" ] || mkdir -p "$BAKDIR"
mysqldump --opt --single-transaction --routines --triggers -u"$USER" -p"$PASSWD" "$DB" | gzip > "$BAKDIR/${DB}_${DATE}.sql.gz"
if [ $? -eq 0 ]; then
ls -lh "$BAKDIR"/*.gz > "$BAKDIR/messages.txt"
mutt -s "${DATE}: $DB backup" -a "$BAKDIR/${DB}_${DATE}.sql.gz" "$MAIL" < "$BAKDIR/messages.txt"
else
echo "${DATE} mysql backup failed" | mail -s "${DATE} mysql backup failed" "$MAIL"
fi
# 清理舊備份
find "$BAKDIR" -name "*.gz" -mtime +$RETENTION -delete
:: full_backup.bat
net stop mysql
xcopy C:\MySQL\data\bbs\*.* D:\db_bak\bbs\%date:~0,10%\ /Y /E /I
net start mysql
註:停庫備份影響可用性,僅適合維護窗口明確的非核心庫。
#!/bin/bash
# mysql_incremental.sh -u user -p pass -d dbname -b /backup -c (首次全備)
# 核心邏輯:flush-logs → 拷貝舊 binlog → 壓縮上傳
# 完整代碼見原文,關鍵點:
# 1. getopts 解析參數
# 2. mysql -e "show variables like 'datadir'" 動態獲取數據目錄
# 3. scp 異地上傳 + logger 記錄失敗
3-2-1 原則:3 份副本、2 種介質、1 份異地。
定期演練恢復,未測試的備份 = 廢紙。