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

MySQL 備份與恢復策略全攻略:四大方案從冷備份到主從複制

     編輯:MySQL 資料庫相關知識

資料庫備份是災難恢復的最後防線。本文針對 MyISAM 表型,詳細解析四種主流備份策略的優劣、適用場景與實作細節。

策略對照表

策略類型適用規模優點缺點
直接拷貝檔案 物理冷備份小型、停機可接受最快、最簡單需鎖表停寫、無增量、跨版本風險
mysqlhotcopy物理熱備份小型、僅 MyISAM速度快、支援單表僅本機、僅 MyISAM、Perl 相依
mysqldump邏輯備份(全量+增量)中型、跨平台遷移通用、可壓縮、可篩選大資料集慢、鎖表久、恢復慢
主從複制即時熱備份大型、高可用架構零停機、即時同步、可分流讀架構複雜、需監控、非邏輯備份替代

策略一:直接拷貝資料檔案(不推薦常態使用)

-- 1. 鎖定所有表並刷新至磁碟
FLUSH TABLES WITH READ LOCK;

-- 2. 複製資料目錄(保持鎖定狀態下操作)
cp -r /var/lib/mysql /backup/mysql_$(date +%F)

-- 3. 釋放鎖定
UNLOCK TABLES;

恢復:停止 MySQL → 覆蓋資料目錄 → 啟動 MySQL。

策略二:mysqlhotcopy(僅 MyISAM、本機)

# 安裝 Perl DBD::mysql
perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config
make && make install

# 每日備份腳本 (crontab 0 3 * * *)
#!/bin/sh
mysqlhotcopy -u root -p 'password' --flushlog --quiet database_name /backup/mysqlhotcopy/

策略三:mysqldump 完整與增量備份(推薦中型專案)

全量備份

# 單庫
mysqldump -u root -p --single-transaction --master-data=2 --routines --triggers db_name > db_full_$(date +%F).sql

# 全庫
mysqldump -u root -p --all-databases --single-transaction --master-data=2 > all_full_$(date +%F).sql

關鍵參數:

  • --single-transaction:InnoDB 熱備份不鎖表
  • --master-data=2:記錄 Binlog 位置(註解形式),利於增量恢復
  • --routines --triggers --events:包含程式物件

增量備份(Binlog)

# 啟用 Binlog (my.cnf)
[mysqld]
log-bin = mysql-bin
server-id = 1
expire_logs_days = 7

# 定期刷新 Binlog
mysqladmin -u root -p flush-logs

# 備份新產生的 Binlog 檔案
cp /var/lib/mysql/mysql-bin.00000X /backup/binlog/

恢復流程

  1. 恢復全量 SQL:mysql -u root -p < db_full_20240101.sql
  2. 重放 Binlog:mysqlbinlog mysql-bin.00000X | mysql -u root -p

策略四:主從複制(高可用架構核心)

詳細配置請參考 《如何配置 MySQL 主從複制》。核心優勢:

  • 從庫可作為即時備份,不影響主庫效能
  • 支援多從庫分流讀查詢
  • 可延遲從庫防誤操作(CHANGE MASTER TO MASTER_DELAY = 3600)

備份驗證與管理最佳實踐

  1. 定期演練恢復:每季至少一次完整恢復演練,驗證備份可用性
  2. 異地備份:備份檔案同步至異地儲存(S3、NAS、異地機房)
  3. 備份加密:敏感資料備份前加密(gpg、openssl)
  4. 監控告警:備份腳本回傳碼、檔案大小、Binlog 連續性納入監控
  5. 保留策略:全量保留 30 天、Binlog 保留 7 天、月末全量保留 1 年
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved