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

MySQL 自動備份腳本實戰:本地輪轉 + 遠程同步(FTP/SCP)

     編輯:MySQL 資料庫相關知識

一、本地自動備份(Crontab + Shell)

1. 設定排程

# 每天 03:30 執行
0 3 * * * /usr/bin/mysql_backup.sh

2. 備份腳本 /usr/bin/mysql_backup.sh

#!/bin/bash
# 保留 6 份歷史備份(滾動輪轉)
BAK_DIR="/home/backup/mysql"
DB_NAME="mydb"
DB_USER="root"
DB_PASS="password"

cd "$BAK_DIR"

# 滾動重命名:bak6 → 刪除,bak5→bak6 ... bak1→bak2
for i in {6..2}; do
    [ -f "db_bak$((i-1)).tgz" ] && mv "db_bak$((i-1)).tgz" "db_bak${i}.tgz"
done
rm -f db_bak.txt

# 匯出並壓縮
mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" > db_bak.txt
tar czf db_bak1.tgz db_bak.txt

# 可選:上傳至遠端
# scp db_bak1.tgz user@remote:/backup/mysql/
# 或用 lftp/curl 上傳 FTP

關鍵參數說明

  • --single-transaction:InnoDB 熱備份不鎖表(需啟用事務)。
  • --routines --triggers:包含儲存程序/觸發器。
  • --master-data=2:在輸出加入 CHANGE MASTER TO 註解,記錄 binlog 位置,利於從庫搭建。

二、遠程同步方案

方式指令範例優點缺點
SCP/SSHscp -i key.pem db_bak1.tgz user@host:/path/加密、標準、免密金鑰需 SSH 服務
rsyncrsync -avz -e ssh db_bak1.tgz user@host:/path/增量傳輸、斷點續傳雙端需 rsync
FTP (lftp)lftp -e "put db_bak1.tgz; bye" -u user,pass ftp://host通用、防火牆友善明文傳輸、較慢
雲存儲 (AWS S3)aws s3 cp db_bak1.tgz s3://bucket/mysql/高耐久、多區域需 CLI 設定

三、進階建議

  • 異地多備:至少兩地(如 IDC + 雲),防單點災難。
  • 定期驗證還原:每季在測試環境 mysql < db_bak.txt 驗證完整性。
  • 監控告警:腳本回傳非 0 碼時發送郵件/Slack/Telegram 通知。
  • mysqldump 大表加 --quick 避免記憶體暴增。
  • 生產環境建議使用 Percona XtraBackup(物理熱備份、速度快、不阻塞)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved