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每日执行
- 打开crontab编辑器:
crontab -e - 添加以下一行(示例为每天凌晨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
相关产品推荐
相关产品推荐

