# 编辑当前用户的crontab
crontab -e
# 添加以下内容,每天凌晨2点备份/home目录到/backups
0 2 * * * tar -czf /backups/home_backup_$(date +\%Y\%m\%d).tar.gz /home
# 安装rsync(如果尚未安装)
sudo apt-get install rsync # Debian/Ubuntu
sudo yum install rsync # CentOS/RHEL
# crontab示例 - 每6小时同步一次
0 */6 * * * rsync -avz --delete /source/directory /backup/directory
a. BorgBackup (推荐)
# 安装
sudo apt-get install borgbackup # Debian/Ubuntu
sudo yum install borgbackup # CentOS/RHEL
# 初始化仓库
borg init --encryption=repokey /backup/repo
# 创建备份
borg create /backup/repo::'{hostname}-{now:%Y-%m-%d}' /path/to/backup
# 设置cron定时任务
0 3 * * * borg create /backup/repo::'{hostname}-{now:%Y-%m-%d}' /path/to/backup
b. Duplicity
# 安装
sudo apt-get install duplicity # Debian/Ubuntu
# 完整备份示例
duplicity full /source/directory file:///backup/directory
# 增量备份
duplicity incremental /source/directory file:///backup/directory
加密敏感数据:如果备份包含敏感信息,使用加密工具如GPG
tar -czf - /home | gpg -c > /backups/home_backup_$(date +\%Y\%m\%d).tar.gz.gpg
异地备份:考虑使用scp或rsync将备份传输到远程服务器
rsync -avz -e ssh /local/backup user@remote:/remote/backup
备份验证:定期验证备份的完整性
borg check /backup/repo
日志记录:重定向cron输出到日志文件以便监控
0 2 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1
保留策略:设置备份保留周期,删除旧备份
# 保留最近7天的备份
find /backups -type f -name "*.tar.gz" -mtime +7 -delete
#!/bin/bash
# 备份配置
BACKUP_DIR="/backups"
SOURCE_DIR="/home /etc /var/www"
DB_USER="dbuser"
DB_PASS="dbpass"
DB_NAME="mydatabase"
REMOTE_SERVER="user@backup.example.com:/remote/backup"
# 创建日期标记
DATE=$(date +%Y-%m-%d)
# 1. 创建本地备份目录
mkdir -p $BACKUP_DIR/$DATE
# 2. 备份文件系统
tar -czf $BACKUP_DIR/$DATE/filesystem.tar.gz $SOURCE_DIR
# 3. 备份MySQL数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DATE/database.sql
# 4. 加密备份(可选)
gpg -c --passphrase "yourpassphrase" $BACKUP_DIR/$DATE/database.sql
# 5. 同步到远程服务器
rsync -avz -e ssh $BACKUP_DIR/$DATE $REMOTE_SERVER
# 6. 清理旧备份(保留30天)
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
将此脚本保存为/usr/local/bin/backup.sh
,赋予执行权限(chmod +x
),然后通过crontab设置定时执行。