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

MySQL 自動備份腳本與災難恢復實戰:基於 mysqlhotcopy 的 Shell 方案

     編輯:MySQL 資料庫相關知識

核心理念

資料庫上線前,先建立「可恢復」機制。備份腳本須自動化、可驗證、可一鍵還原。

環境假設

  • OS: CentOS Linux
  • 工具: mysqlhotcopy(需 Perl、DBD::mysql,適用 MyISAM 表)
  • 備份目錄: /backup/mysql

自動備份腳本 /root/mysql-backup.sh

#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin

BACKDIR=/backup/mysql
ROOTPASS='YourRootPassword'   # 請替換為真實密碼

# 重建備份目錄
rm -rf $BACKDIR
mkdir -p $BACKDIR

# 獲取所有資料庫名稱(/var/lib/mysql 下的子目錄)
DBLIST=$(ls -p /var/lib/mysql | grep / | tr -d /)

# 逐庫熱備份
for dbname in $DBLIST; do
    mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

部署自動化

  1. chmod 700 /root/mysql-backup.sh(僅 root 可執行)
  2. 測試執行:/root/mysql-backup.sh → 檢查 ls -l /backup/mysql/
  3. 加入 crontab 每日凌晨 3 點執行:
    00 03 * * * /root/mysql-backup.sh

災難恢復演練(兩大場景)

場景一:資料庫被誤刪除

  1. 模擬建庫建表插入測試資料。
  2. 執行備份腳本產生基準備份。
  3. 模擬刪除:DROP TABLE test; DROP DATABASE test;
  4. 還原操作:
    cp -Rf /backup/mysql/test/ /var/lib/mysql/
    chown -R mysql:mysql /var/lib/mysql/test/
    chmod 700 /var/lib/mysql/test/
    chmod 660 /var/lib/mysql/test/*
  5. 驗證:登入 MySQL → USE test; SELECT * FROM test; 資料完整回覆。

場景二:資料被惡意篡改

  1. 確認當前正常資料狀態。
  2. 再次執行備份腳本(建立篡改前快照)。
  3. 模擬篡改:UPDATE test SET name='Shit,Windows' WHERE num=1;
  4. 還原操作:同場景一 cp -Rf ... 覆蓋資料目錄。
  5. 驗證:資料恢復為 Hello,CentOS。

關鍵注意事項

  • mysqlhotcopy 僅支援 MyISAM: InnoDB 請改用 mysqldump --single-transaction 或 xtrabackup。
  • 權限與屬性還原: chown/chmod 步驟不可省略,否則 MySQL 無法讀取還原的檔案。
  • 備份驗證機制: 定期在測試環境執行完整還原演練,記錄 RTO(恢復時間目標)。
  • 即時備份觸發: 重大變更(結構調整、大批量導入)前手動執行腳本建立快照。

總結

一個 mysqlhotcopy + Shell + crontab 的輕量方案,即可構建「每日自動備份 + 分鐘級還原」的基礎防線。專業與業餘的分水嶺,在於「備份能不能用」以及「敢不敢在生產環境按下還原鍵」。

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