首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 備份恢復全攻略:mysqldump、LVM、二進制日志、物理拷貝與災難恢復實戰

     編輯:MySQL 資料庫相關知識

備份工具對比與選型

工具/方法類型適用引擎熱備速度增量跨版本備註
mysqldump邏輯全引擎✅ (單事務/鎖表)慢❌✅最通用、升級遷移首選
mysqlhotcopy物理MyISAM✅極快❌❌僅 Unix/NetWare,需本機執行
SQL 語法
(BACKUP TABLE / SELECT INTO OUTFILE)
物理/邏輯MyISAM⚠️中❌❌不推薦,功能受限
二進制日志增量邏輯全引擎✅快✅✅PITR、主從同步基石
物理文件拷貝物理全引擎❌ (需全局鎖)極快❌⚠️ (版本/架構敏感)冷備/快速克隆
LVM/SAN 快照物理全引擎✅極快✅ (配合 binlog)⚠️企業級首選,見文章 91003

mysqldump 核心參數精解

# MyISAM 推薦(含觸發器/存儲過程/十六進制 Blob/全局鎖/完整 INSERT 關閉)
mysqldump -u$user -p$pass --default-character-set=utf8 \
  --opt --extended-insert=false --triggers -R --hex-blob -x db_name > db_name.sql

# InnoDB 推薦(單事務一致性,無需鎖表)
mysqldump -u$user -p$pass --default-character-set=utf8 \
  --opt --extended-insert=false --triggers -R --hex-blob --single-transaction db_name > db_name.sql

關鍵參數說明:

  • --opt = 多項優化組合(默認開啟)
  • --single-transaction:InnoDB 熱備核心,互斥 --lock-tables
  • --quick:流式導出,大表必加,防 OOM
  • --hex-blob:二進制字段必加
  • --extended-insert=false:生成單行 INSERT,便於部分恢復/審計,犧牲導入速度

恢復方式

# 1. 客戶端管道導入(推薦)
mysql -u$user -p$pass db_name < backup.sql

# 2. SOURCE 命令(需絕對路徑,mysqld 進程用戶可讀)
mysql> SOURCE /full/path/backup.sql;

二進制日志增量備份與 PITR


# 配置 my.cnf
server-id=1
log-bin=mysql-bin
log-bin-index=mysql-bin.index

# 切換日志(獲取一致性切點)
mysql> FLUSH LOGS;

# 備份 binlog.000001 ~ binlog.00000N + binlog.index
# 從庫還需備份 master.info、relay-log.info

# 恢復:全量備份 + binlog 重放
mysqlbinlog binlog.000001 | mysql -u$user -p$pass db_name
# 指定時間點恢復
mysqlbinlog --stop-datetime="2023-10-01 12:00:00" binlog.000001 | mysql ...

物理冷備/熱備操作規範


# 1. 刷新並鎖定
mysql> FLUSH TABLES WITH READ LOCK;

# 2. 拷貝數據目錄 + InnoDB 日志文件 (ib_logfile*)
cp -r /var/lib/mysql /backup/physical_$(date +%F)

# 3. 解鎖
mysql> UNLOCK TABLES;

備份策略建議

業務級別全量頻率增量頻率架構建議
一般周日單機 + 定時腳本
重要/繁忙日時主從架構,在從庫備份,零業務影響
核心/金融級日分/秒 (binlog 實時流式)多從庫 + 異地災備 + 定期演練

維護與災難恢復

  • MyISAM:CHECK/REPAIR/OPTIMIZE/ANALYZE TABLE 或 myisamchk 離線操作。
  • InnoDB 碎片整理:ALTER TABLE tbl ENGINE=InnoDB;(Online DDL 5.6+ 無鎖)。
  • InnoDB 損壞自動恢復:innodb_force_recovery=1..6(遞增嘗試,≥4 唯讀),配合 innodb_log_file 重做日志滾動恢復。

總結

無最佳方案,只有最適架構:主從分離備份 + binlog 增量 + 定期全量 + 定期恢復演練 是企業級底線。從今天開始建立你的備份體系!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved