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

Ubuntu Server MySQL 自動備份腳本實戰:mysqldump + 定時任務 + 7天留存 + 壓縮存儲

     編輯:MySQL 資料庫相關知識

生產級 MySQL 備份三要素:**自動化、壓縮、留存策略**。本文提供 Ubuntu Server 下完整 Shell 腳本:mysqldump 熱備份 → gzip 壓縮 → 日期命名 → cron 定時執行 → 超期自動清理,可直接落地生產。

腳本核心功能

  • 單庫備份(指定 DB_NAME)
  • --single-transaction InnoDB 熱備不鎖表
  • --routines --triggers --events 完整導出對象
  • gzip 壓縮,節省 70%+ 空間
  • 日期命名 mysqldata_bak_YYYY_MM_DD.tar.gz
  • 僅保留最近 7 天(可配置 DAYS)
  • 文件屬性歸屬 chown,便於異地同步

完整腳本:/home/mysql_data/mysql_databak.sh


#!/bin/bash
# MySQL 每日自動備份腳本
# 部署路徑:/home/mysql_data/mysql_databak.sh
# 執行權限:chmod +x /home/mysql_data/mysql_databak.sh
# 定時任務:45 22 * * * root /home/mysql_data/mysql_databak.sh

DUMP=/usr/bin/mysqldump                    # mysqldump 路徑
OUT_DIR=/home/mysql_data                   # 備份存放目錄
LINUX_USER=root                            # 文件屬主用戶
DB_NAME=pw85                               # 目標資料庫
DB_USER=root                               # 資料庫用戶(非 root 需加 --skip-lock-tables)
DB_PASS=123456                             # 資料庫密碼
DAYS=7                                     # 保留天數

cd "$OUT_DIR" || exit 1
DATE=$(date +%Y_%m_%d)
OUT_SQL="${DATE}.sql"
TAR_SQL="mysqldata_bak_${DATE}.tar.gz"

# 1. 熱備份 + 導出 SQL
"$DUMP" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" \
  --default-character-set=utf8mb4 \
  --opt -Q -R --skip-lock-tables \
  --single-transaction \
  --routines --triggers --events \
  > "$OUT_SQL"

# 2. 壓縮
tar -czf "$TAR_SQL" "./$OUT_SQL"

# 3. 清理中間 SQL
rm -f "$OUT_SQL"

# 4. 修正文件屬主
chown "$LINUX_USER:$LINUX_USER" "$OUT_DIR/$TAR_SQL"

# 5. 清理超期備份(7天前)
find "$OUT_DIR" -name "mysqldata_bak_*" -type f -mtime +"$DAYS" -exec rm -f {} \;

echo "[$(date)] Backup completed: $TAR_SQL"

部署與驗證步驟

  1. 創建目錄:mkdir -p /home/mysql_data
  2. 寫入腳本:nano /home/mysql_data/mysql_databak.sh 貼上內容,Ctrl+O 存檔,Ctrl+X 退出
  3. 賦權:chmod +x /home/mysql_data/mysql_databak.sh
  4. 測試執行:/home/mysql_data/mysql_databak.sh,確認生成 .tar.gz 且可解壓導入
  5. 配置 cron:
    
    nano /etc/crontab
    # 添加:每天 22:45 執行
    45 22 * * * root /home/mysql_data/mysql_databak.sh
    
  6. 重啟 cron:systemctl restart cron / service cron restart
  7. 啟用開機自啟:systemctl enable cron

恢復操作


# 1. 解壓
tar -zxvf mysqldata_bak_2024_01_15.tar.gz

# 2. 導入
mysql -u root -p dbname < 2024_01_15.sql

# 或單庫導入(含建庫)
mysql -u root -p < 2024_01_15.sql

進階增強(可選)

  • 異地同步:rsync -avz /home/mysql_data/ user@backup-server:/remote/backup/
  • 加密:gpg --symmetric --cipher-algo AES256 mysqldata_bak_*.tar.gz
  • 多庫並行:腳本數組化 DB_LIST=("db1" "db2") 迴圈處理
  • 監控告警:腳本末尾 curl -X POST "https://webhook/alert" -d "status=$?"
  • 邏輯備份+物理備份結合:週末 xtrabackup 物理全備,工作日邏輯增備

「備份未恢復等於沒備份」,定期演練恢復流程,才是高可用的基石。

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