Ubuntu时间戳如何用于数据备份
小樊
35
2025-11-22 18:06:35
Ubuntu 时间戳在数据备份中的用法
一、核心思路
- 在备份文件名或目录名中嵌入时间戳,形成唯一、可排序的备份版本,便于追溯与回滚。常用格式:YYYY-MM-DD_HH-MM-SS、YYYYMMDD_HHMMSS、YYYYMMDD。示例: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 任务使用绝对路径,并在日志中记录开始/结束时间与结果