首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 自動備份腳本實戰:mysqldump + 壓縮 + 郵件發送 + 定時任務

     編輯:MySQL 綜合教學

生產級 MySQL 自動備份方案:腳本化、壓縮、異地郵件、定時調度

數據庫是核心資產,備份必須自動化、異地化、可驗證。WordPress 插件僅覆蓋單站點,多站點、非 WP 系統需通用方案。

一、核心備份腳本 automysqlbackup.sh

#!/bin/bash
# 配置區
DB_USER="backup_user"
DB_PASS="strong_password"
DB_NAMES="db1 db2 db3"           # 多庫空格分隔
BACKUP_DIR="/home/website/backups"
MAIL_TO="admin@example.com"
DATE_TAG=$(date +%F_%H-%M-%S)
SQL_FILE="${BACKUP_DIR}/db_backup_${DATE_TAG}.sql"
TAR_FILE="${BACKUP_DIR}/db_backup_${DATE_TAG}.tar.gz"

# 1. 邏輯備份(需 RELOAD, LOCK TABLES, SHOW VIEW 權限)
mysqldump -u${DB_USER} -p${DB_PASS} --databases ${DB_NAMES} \
    --single-transaction --routines --triggers --events \
    > ${SQL_FILE}

# 2. 壓縮減小體積
tar -zcf ${TAR_FILE} -C ${BACKUP_DIR} $(basename ${SQL_FILE})

# 3. 郵件發送(需配置 mutt/msmtp + SMTP)
echo "MySQL 備份 ${DATE_TAG}" | mutt -s "【自動備份】MySQL 數據庫 ${DATE_TAG}" \
    -a ${TAR_FILE} -- ${MAIL_TO}

# 4. 清理本地臨時文件(保留壓縮包按策略清理)
rm -f ${SQL_FILE}
# 可選:find ${BACKUP_DIR} -name "*.tar.gz" -mtime +7 -delete  # 保留 7 天

exit 0

二、權限最小化備份用戶

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, RELOAD, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER 
ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;

無需 root 權限,遵循最小權限原則。若無 LOCK TABLES,去掉 --single-transaction 會導致 MyISAM 表鎖表。

三、定時任務配置

# 編輯 crontab
crontab -e

# 每天凌晨 2:30 執行(低峰期)
30 2 * * * /home/website/automysqlbackup.sh >> /home/website/logs/backup.log 2>&1

四、進階增強方案

需求實現方案
大庫分表並行備份mysqldump --tab 導出 TSV + 並行壓縮,或用 mydumper 多線程工具
增量備份開啟 log_bin,配合 mysqlbinlog 定時同步 binlog 到異地
備份驗證定期在測試環境 mysql < backup.sql 恢復驗證,校驗 CHECKSUM TABLE
異地存儲上傳至 S3/OSS/COS,或 rsync 到異地服務器
監控告警腳本返回碼非 0 觸發釘釘/企微/郵件告警,Prometheus 采集備份耗時/大小指標

五、Windows 環境適配

  • 用 mysqldump.exe + 7z.exe 壓縮
  • 郵件發送用 PowerShell Send-MailMessage 或 Blat.exe
  • 定時用任務計劃程序

備份未恢復等於沒備份。建立「備份→壓縮→異地→驗證→監控」閉環,定期演練恢復流程(RTO/RPO 量化)。

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