温馨提示×

Ubuntu时间戳如何用于数据备份

小樊
35
2025-11-22 18:06:35
栏目: 智能运维

Ubuntu 时间戳在数据备份中的用法

一、核心思路

  • 在备份文件名或目录名中嵌入时间戳,形成唯一、可排序的备份版本,便于追溯与回滚。常用格式:YYYY-MM-DD_HH-MM-SSYYYYMMDD_HHMMSSYYYYMMDD。示例:backup_2025-11-22_10-30-00.tar.gz。
  • 在定时任务中利用时间戳决定何时运行备份(如每天/每周的固定时刻),确保周期性与可预期性。
  • 结合保留策略按时间清理旧备份(如保留最近7天、最近4周),避免磁盘被占满。

二、常用命令与示例

  • 文件名加时间戳(tar 归档)
    • 关键:DATE=$(date +“%Y-%m-%d_%H-%M-%S”)
    • 示例:
      • #!/bin/bash SOURCE=“/path/to/src” DEST=“/backup” DATE=$(date +“%Y-%m-%d_%H-%M-%S”) tar -czvf “$DEST/backup-$DATE.tar.gz” -C “$SOURCE” .
  • 目录名加时间戳(rsync 全量)
    • 关键:按时间创建目录,rsync 同步到该目录
    • 示例:
      • #!/bin/bash SRC=“/path/to/src” DST_BASE=“/backup” TS=$(date +“%Y%m%d_%H%M%S”) DST=“$DST_BASE/backup_$TS” mkdir -p “$DST” rsync -a --delete “$SRC/” “$DST/”
  • 数据库备份文件名加时间戳(mysqldump)
    • 关键:将时间戳嵌入 .sql.gz 文件名
    • 示例:
      • #!/bin/bash DB=“blog”; USER=“root”; PASS=“******” BACKUP_DIR=“/opt/mysql_backups” FILE=“$BACKUP_DIR/${DB}$(date +%Y%m%d%H%M%S).sql.gz” mysqldump -h localhost -u"$USER" -p"$PASS" “$DB” | gzip > “$FILE”

三、定时执行与日志

  • 编辑定时任务:运行 crontab -e,添加时间表达式与脚本的绝对路径。
  • 常用时间表达式
    • 每天 02:00:0 2 * * *
    • 每周日 03:00:0 3 * * 0
    • 每5分钟:*/5 * * * *
  • 将输出重定向到日志,便于审计与排错
    • 示例:0 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1
  • 查看与验证
    • 查看任务:crontab -l
    • 查看服务状态:sudo service cron status(大多数环境无需重启 cron,修改即生效)

四、按时间保留与清理策略

  • 按“天数”删除旧备份(find 的 -mtime)
    • 示例:删除 7天前 的 .tar.gz 文件
      • find /backup -name “*.tar.gz” -mtime +7 -delete
  • 按“周数”删除旧备份(find 的 -mtime)
    • 示例:删除 4周前 的 .sql.gz 文件
      • find /opt/mysql_backups -name “*.sql.gz” -mtime +28 -delete
  • 按“数量”保留最近 N 个备份(结合 ls 与排序)
    • 示例:保留最近 3 个 .tar.gz,其余删除
      • cd /backup && ls -1t *.tar.gz | tail -n +4 | xargs rm -f
  • 安全建议
    • 清理前先打印将被删除的文件列表(去掉 -delete 试运行)
    • 脚本加上执行权限:chmod +x /path/to/backup.sh
    • 为 cron 任务使用绝对路径,并在日志中记录开始/结束时间与结果

0