MySQL自动备份与清理:编写Shell脚本保留最近5天数据

夏知夏
夏知夏
发布时间:2026-10-14 | 5人浏览过
原创

通过Shell脚本实现MySQL数据的自动备份和旧文件清理,是保障数据安全的基础操作。本教程提供了一套成熟的脚本代码,支持按库循环备份、生成带时间戳的压缩包以及自动删除超过5天的历史备份。

备份方案与准备条件

在执行数据库备份前,需要确认服务器环境已安装 mysqldump 工具及标准Linux命令(如 tar, date)。该脚本采用 for 循环机制,适用于需要批量备份多个具有特定名称特征的数据库场景。

配置注意事项:

  • 路径规划:脚本默认将备份文件存储在 /mysql_bak 目录下,请确保该目录有写入权限。
  • 安全警告:脚本中直接硬编码了数据库密码。在生产环境中,建议使用 .my.cnf 配置文件存放凭证,以提高安全性。
  • 清理策略:脚本通过匹配日期和时间戳文件名来删除备份。如果备份失败导致产生无扩展名或异常命名的文件,该删除逻辑可能无法精准识别,需结合实际情况调整。

核心功能解析

第1步:参数定义与变量初始化

脚本首先定义了数据库连接信息及存储路径。其中,USER 为管理员账号,PASSWORD 为对应密码。数据库列表通过系统命令动态获取,此处设定为包含 idss 关键字的所有数据库,以规避手动逐一列出带来的维护成本。

# 数据库认证信息
USER=root 
PASSWORD=cucrzmysql 

# 路径与基础设置
BACKUP_DIR=/mysql_bak 
LOGFILE=/mysql_bak/data_backup.log 
DATE=`date '+%Y%m%d-%H%M'` 

# 计算5天前的日期,用于定位待删除的文件
DATE_5=`date -d "-5 day" +%Y%m%d`

第2步:创建目录与日志预处理

在正式操作前,脚本会检查备份目录是否存在,若不存在则自动创建。同时,向日志文件追加分隔线和当前时间戳,以便后续追踪每次备份的具体发生时间。

# 确保备份目录存在
if [ ! -d $BACKUP_DIR ];then
  mkdir -p "$BACKUP_DIR"
fi

# 初始化日志头
echo " ">> $LOGFILE
echo "----------------------">> $LOGFILE
echo "BACKUP DATE:" $(date +"%Y-%m-%d %H:%M:%S") >> $LOGFILE
echo "----------------------">> $LOGFILE

第3步:执行备份与归档

这是脚本的核心部分。进入备份目录后,利用 mysqldump 导出原始 SQL 文件,随后使用 tar 命令将其压缩。--opt 参数是 mysqldump 的优化选项集合,能显著提升大型数据库的备份效率。

# 切换至备份目录进行本地处理
cd $BACKUP_DIR

for DATABASE in `ls /mysql/data/mysql/ | grep idss`
do
  DUMPFILE=$DATABASE-$DATE.sql
  ARCHIVE=$DATABASE-$DATE.sql.tgz

  # 执行数据库Dump
  mysqldump --opt $DATABASE -uroot -pcucrzmysql > /$BACKUP_DIR/$DUMPFILE

  # 检查备份状态
  if [[ $? == 0 ]]; then
    # 压缩备份文件
    tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
    # 移除未压缩的原文件
    rm -f $DUMPFILE
    echo "[$ARCHIVE] Backup Successful!" >> $LOGFILE
  else
    echo "Database Backup Fail!" >> $LOGFILE
  fi
done

第4步:清理过期数据

为了确保磁盘空间不被无限占用,脚本在每个循环结束时尝试删除五天前的备份。它通过提取五天前日期的前缀进行文件名匹配。

# 删除五天前的备份文件
rm -rf $DATABASE-$DATE_5*

部署与维护指南

为了使此脚本自动运行,最推荐的方式是配置 Linux 的 Crontab 定时任务。例如,若希望每晚凌晨 2 点执行一次备份,可运行 crontab -e 并添加以下行:

0 2 * * * /path/to/your/backup_script.sh

建议初次运行时先不加入 Crontab,而是手动执行一次(赋予脚本 chmod +x 执行权限后),观察 /mysql_bak/data_backup.log 日志,确认是否有报错,特别是检查 mysqldump 能否成功导出并生成 .sql.tgz 文件。

以上就是关于 MySQL 自动备份与清理旧文件的详细内容,更多关于 Shell 脚本与数据库维护的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表