萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 常用備份方法全景指南:從物理複製到邏輯導出、主從複制與自動化腳本

備份方法分類總覽

類別方法優點缺點適用場景
物理備份直接拷貝檔案 (FLUSH TABLES WITH READ LOCK + tar/cp)速度快、恢復快需鎖表、版本/架構強綁定、InnoDB 需備份 ib_logfile*小數據庫、維護窗口可接受鎖表
mysqlhotcopy (Perl)MyISAM 專用、極快僅支援 MyISAM、本機のみ純 MyISAM 環境
邏輯備份mysqldump (SQL 級)跨版本遷移、可編輯、工具鏈成熟大庫慢、恢復慢、單線程中小庫、異構遷移、開發測試
mydumper/myloader多線程、壓縮、斷點續傳需額外安裝大庫並行備份/恢復首選
複制架構主從/主主/半同步/GTID/MGR準實時、高可用、讀寫分離架構複雜、非傳統備份替代品核心業務高可用、讀擴展
自動化Shell/Python + crontab / 系統任務靈活、可整合告警、上傳異地需自行維護腳本所有場景

核心方法詳解

1. 物理冷/熱備份(需鎖表)


mysql> FLUSH TABLES WITH READ LOCK;
# 另開終端
tar zcvf /backup/mysql_$(date +%F).tar.gz /var/lib/mysql
mysql> UNLOCK TABLES;

InnoDB 必備:同步備份 ib_logfile*,否則崩潰恢復不完整。

2. mysqldump 經典用法


# 單庫
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

3. Linux 自動備份 Shell 腳本(生產級)


#!/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

4. Windows 批次備份(任務排程器)


:: full_backup.bat
net stop mysql
xcopy C:\MySQL\data\bbs\*.* D:\db_bak\bbs\%date:~0,10%\ /Y /E /I
net start mysql

註:停庫備份影響可用性,僅適合維護窗口明確的非核心庫。

5. Linux 增量備份腳本框架(基於 Binlog)


#!/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 記錄失敗

選型決策樹

  1. 數據量 < 50GB、可接受停寫窗口 → mysqldump + 壓縮 + 異地
  2. 數據量 > 50GB、要求 RPO < 5min → 主從複制 + 從庫備份 + Binlog 歸檔
  3. 極高可用、自動故障切換 → MGR (MySQL Group Replication) / InnoDB Cluster
  4. 雲上托管 → RDS 自動備份 + 跨區域備份 + Binlog 保留

黃金法則

3-2-1 原則:3 份副本、2 種介質、1 份異地。
定期演練恢復,未測試的備份 = 廢紙。

copyright © 萬盛學電腦網 all rights reserved