萬盛學電腦網

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

MySQL 資料庫備份與恢復方法大全:邏輯備份、物理冷備份、xtrabackup 熱備份、主從備份、PHP 程式備份、最佳實踐清單

方法一:邏輯備份 —— mysqldump(通用標準)

詳見《MySQL mysqldump 導出導入命令大全》一文,此處列舉核心場景:

  • 單庫:mysqldump -u... -p db > backup.sql
  • 壓縮:mysqldump ... | gzip > backup.sql.gz
  • 結構:mysqldump --no-data ...
  • InnoDB 熱備份:--single-transaction --master-data=2
  • 還原:mysql -u... -p db < backup.sql 或 gunzip -c backup.sql.gz | mysql ...

方法二:物理冷備份 —— 停庫複製數據目錄(極速、版本綁定)

# Windows 批次腳本 (bak.bat)
@echo off
net stop mysql
xcopy "D:\MySQL\data\*.*" "D:\mysqlbak\webbak%date:~0,10%\" /E /Y /C
net start mysql

Linux 對應:systemctl stop mysqld && rsync -av /var/lib/mysql/ /backup/mysql/ && systemctl start mysqld

方法三:Percona XtraBackup 熱備份(InnoDB 生產首選,無停機)

# 安裝
yum install percona-xtrabackup-24  # 或 apt-get install percona-xtrabackup

# 完全備份
xtrabackup --backup --target-dir=/backup/full_$(date +%F) --user=root --password

# 增量備份 (基於上次完全備份)
xtrabackup --backup --target-dir=/backup/inc_$(date +%F) \
  --incremental-basedir=/backup/full_2024-01-15 --user=root --password

# 準備/合併 (還原前必須)
xtrabackup --prepare --target-dir=/backup/full_2024-01-15
xtrabackup --prepare --apply-log-only --target-dir=/backup/full_2024-01-15 \
  --incremental-dir=/backup/inc_2024-01-16

# 還原 (需停庫、清空 datadir)
xtrabackup --copy-back --target-dir=/backup/full_2024-01-15
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

方法四:主從復制 + 從庫備份(零主庫影響)

  • 架構:Master 寫入 → Binlog 同步 → Slave
  • 備份在 Slave 執行 STOP SLAVE; mysqldump ...; START SLAVE;
  • 或 Slave 直接物理備份(需 FLUSH TABLES WITH READ LOCK 獲取一致位置)
  • 優勢:主庫零負擔、備份不影響業務、可異地部署 Slave

方法五:PHP 程式層面備份(應用整合、表級)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
function copy_table($pdo, $from, $to) {
    $stmt = $pdo->query("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='$to'");
    if ($stmt->fetchColumn()) return false;
    $pdo->exec("CREATE TABLE $to LIKE $from");
    $pdo->exec("INSERT INTO $to SELECT * FROM $from");
    return true;
}
copy_table($pdo, 'products', 'products_bak');
?>

備份策略選型決策矩陣

場景推薦方案RPORTO對主庫影響
中小型庫 (<50GB)、需跨版本遷移mysqldump 邏輯備份小時級小時級輕微鎖表/IO
大型庫 (>100GB)、同環境、有維護窗口物理冷備份 (rsync/xtrabackup --backup)小時級分鐘級停機
核心業務 7×24、InnoDB 為主XtraBackup 熱備份 + 增量分鐘級分鐘級極低 (僅 FLUSH TABLES)
極低 RPO/RTO、跨機房容災主從/主主 + 從庫備份 + Binlog 歸檔秒級秒級無

黃金備份最佳實踐清單

  1. 3-2-1 原則:3 份副本、2 種介質、1 份異地
  2. 分級保留:日備留 7 天、週備留 4 週、月備留 12 月、年備留 3 年
  3. 加密傳輸與靜態加密:gzip -c | openssl enc -aes-256-cbc -k "pass"
  4. 自動化驗證:每日腳本自動恢復至測試庫,校驗核心表行數、檢查和
  5. 文檔化恢復手冊:含各場景步驟、預計耗時、責任人、驗收標準
  6. 季度演練:模擬機房故障、誤刪表、勒索軟體加密等場景
  7. 監控告警:備份任務成功/失敗、備份檔大小異常、Binlog 積壓、磁碟空間
copyright © 萬盛學電腦網 all rights reserved