插件窝 干货文章 如何在Linux上设置定时备份

如何在Linux上设置定时备份

备份 backup bash directory 759    来源:    2025-04-15

Linux定时备份设置指南

常用备份方法

1. 使用crontab + tar/gzip

# 编辑当前用户的crontab
crontab -e

# 添加以下内容,每天凌晨2点备份/home目录到/backups
0 2 * * * tar -czf /backups/home_backup_$(date +\%Y\%m\%d).tar.gz /home

2. 使用rsync进行增量备份

# 安装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

3. 使用专业的备份工具

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

最佳实践建议

  1. 加密敏感数据:如果备份包含敏感信息,使用加密工具如GPG

    tar -czf - /home | gpg -c > /backups/home_backup_$(date +\%Y\%m\%d).tar.gz.gpg
    
  2. 异地备份:考虑使用scp或rsync将备份传输到远程服务器

    rsync -avz -e ssh /local/backup user@remote:/remote/backup
    
  3. 备份验证:定期验证备份的完整性

    borg check /backup/repo
    
  4. 日志记录:重定向cron输出到日志文件以便监控

    0 2 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1
    
  5. 保留策略:设置备份保留周期,删除旧备份

    # 保留最近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设置定时执行。