数据库自动备份方案-更新版

作者:admin 日期:2026年03月10日 地点:洛杉矶,加州,美国

一、整体架构

系统由两部分组成:

1. 生产服务器

负责:

  • 定时执行数据库备份;
  • 根据数据库列表自动生成备份任务;
  • 保存数据库备份文件;
  • 记录备份执行日志。

目录结构:

/backup/app
├── mysqldata     # 数据库备份文件
└── logs          # 备份日志

2. 备份服务器

负责:

  • 定时从生产服务器获取备份文件;
  • 保存历史备份数据;
  • 记录同步过程日志。

目录结构:

/backup/app
├── data          # 同步后的备份文件
└── logs          # 同步日志

二、生产服务器数据库备份

备份脚本功能

备份脚本主要实现:

  1. 自动获取数据库列表;
  2. 排除系统数据库;
  3. 每个业务数据库单独备份;
  4. 使用 gzip 压缩;
  5. 记录成功、失败状态;
  6. 自动清理过期备份。

备份文件示例:

数据库名称_日期时间.sql.gz

例如:

business_2026-08-11_01-00.sql.gz

备份脚本示例

#!/bin/bash

DATE=$(date +%F_%H-%M)

BACKUP_DIR="/backup/app/mysqldata"
LOG_DIR="/backup/app/logs"

LOG_FILE="$LOG_DIR/mysql_backup.log"


DB_USER="数据库账号"
DB_PASS="数据库密码"


mkdir -p "$BACKUP_DIR"
mkdir -p "$LOG_DIR"


echo "==============================" >> "$LOG_FILE"
echo "$(date '+%F %T') Backup Start" >> "$LOG_FILE"


DATABASES=$(mysql \
-u"$DB_USER" \
-p"$DB_PASS" \
-N \
-e "SHOW DATABASES;" \
| grep -Ev "information_schema|performance_schema|mysql|sys")


for DB in $DATABASES
do

    FILE="${BACKUP_DIR}/${DB}_${DATE}.sql.gz"


    echo "$(date '+%F %T') Start $DB" >> "$LOG_FILE"


    mysqldump \
    -u"$DB_USER" \
    -p"$DB_PASS" \
    --single-transaction \
    --routines \
    --triggers \
    --events \
    "$DB" \
    | gzip > "$FILE"


    if [ $? -eq 0 ]
    then

        SIZE=$(du -h "$FILE" | awk '{print $1}')

        echo "$(date '+%F %T') $DB Success Size=$SIZE" >> "$LOG_FILE"

    else

        echo "$(date '+%F %T') $DB Failed" >> "$LOG_FILE"

        rm -f "$FILE"

    fi

done


find "$BACKUP_DIR" \
-type f \
-name "*.sql.gz" \
-mtime +7 \
-delete


echo "$(date '+%F %T') Backup Finish" >> "$LOG_FILE"

三、备份服务器同步

同步方式

采用 rsync 增量同步:

生产服务器
      |
      |
      ↓
  rsync同步
      |
      ↓
备份服务器

优势:

  • 只传输变化文件;
  • 节省网络资源;
  • 支持断点续传;
  • 保留文件属性。

同步脚本示例

#!/bin/bash


SOURCE="远程服务器:/backup/app/mysqldata/"

TARGET="/backup/app/data"

LOG="/backup/app/logs/rsync.log"



echo "==============================" >> $LOG

echo "$(date '+%F %T') Sync Start" >> $LOG


rsync \
-avz \
--delete \
$SOURCE \
$TARGET \
>> $LOG 2>&1


if [ $? -eq 0 ]
then

echo "$(date '+%F %T') Sync Success" >> $LOG

else

echo "$(date '+%F %T') Sync Failed" >> $LOG

fi

四、定时任务

生产服务器

每天凌晨执行数据库备份:

0 1 * * * /usr/local/bin/mysql_backup.sh

意思:每天凌晨1点备份


备份服务器

每天凌晨执行同步:

30 1 * * * /usr/local/bin/backup_sync.sh

每天凌晨1点半同步

五、日志管理

日志统一保存:

/backup/app/logs

包含:

数据库备份日志

mysql_backup.log

记录:

  • 开始时间;
  • 数据库名称;
  • 成功状态;
  • 备份大小;
  • 异常信息。

同步日志

rsync.log

记录:

  • 同步时间;
  • 文件变化;
  • 同步结果。

六、安全建议

  1. 使用 SSH 密钥认证进行服务器同步;
  2. 避免脚本中明文保存数据库密码;
  3. 限制备份账号权限;
  4. 定期检查备份文件完整性;
  5. 定期进行恢复测试,确保备份可用。
← 上一篇:MariaDB 安装后必做的核心设置步骤 下一篇:通过ssh打开openclaw登录验证 →