You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 24.04 LTS下归档旧MySQL备份SQL文件的脚本需求

每日MySQL备份归档脚本实现

你已经有一个每30分钟通过cron执行的MySQL备份脚本,将备份文件存储在/media/backup-disk/mysql-backup路径下。以下是满足需求的每日归档脚本,以及配置说明:

归档脚本代码

将以下内容保存为mysql_archive.sh,并赋予执行权限(chmod +x mysql_archive.sh):

#!/bin/bash -e

# 配置参数 - 根据实际情况修改
BACKUP_DIR="/media/backup-disk/mysql-backup"
ARCHIVE_DIR="/huge-backup-disk/archive/mysql-backups"
DAYS_THRESHOLD=7  # 设置需要归档的文件天数阈值(早于X天)
ARCHIVE_DATE=$(date +%Y-%m-%d)

# 确保归档目录存在,不存在则创建
mkdir -p "$ARCHIVE_DIR"

# 查找符合条件的.sql备份文件
BACKUP_FILES=$(find "$BACKUP_DIR" -type f -name "*.sql" -mtime +$DAYS_THRESHOLD)

# 仅当存在需要归档的文件时执行后续操作
if [ -n "$BACKUP_FILES" ]; then
    # 压缩文件为带日期的tar.gz包
    tar -czf "$ARCHIVE_DIR/mysql_backups_archive_$ARCHIVE_DATE.tar.gz" $BACKUP_FILES
    
    # 验证压缩是否成功,成功则删除原备份文件
    if [ $? -eq 0 ]; then
        rm -f $BACKUP_FILES
        echo "$(date +%Y-%m-%d %H:%M:%S) - 归档完成:$ARCHIVE_DIR/mysql_backups_archive_$ARCHIVE_DATE.tar.gz,已清理原备份文件"
    else
        echo "$(date +%Y-%m-%d %H:%M:%S) - 压缩失败,未删除原备份文件"
        exit 1
    fi
else
    echo "$(date +%Y-%m-%d %H:%M:%S) - 没有早于$DAYS_THRESHOLD天的备份文件需要归档"
fi

关键逻辑说明

  • 参数配置:把备份路径、归档路径和天数阈值都设为变量,方便后续调整
  • 文件查找:用find命令的-mtime +$DAYS_THRESHOLD筛选修改时间早于X天的文件(备份文件的修改时间即为备份生成时间,比创建时间更可靠)
  • 压缩归档:使用tar -czf创建gzip压缩的tar包,文件名包含归档日期,便于区分
  • 安全校验:通过$?判断压缩命令是否执行成功,只有成功才删除原文件,避免数据丢失
  • 日志输出:添加时间戳日志,方便后续排查问题

配置cron每日执行

  1. 打开crontab编辑器:crontab -e
  2. 添加以下一行(示例为每天凌晨2点执行,可根据需求调整时间):
0 2 * * * /path/to/mysql_archive.sh >> /var/log/mysql_archive.log 2>&1
  • 说明:0 2 * * *表示每天凌晨2点执行;>> /var/log/mysql_archive.log 2>&1将脚本的输出和错误信息写入日志文件,便于查看执行情况

内容的提问来源于stack exchange,提问作者Marko Amb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:15:56