本文详解数据备份的3-2-1原则、常用工具对比、自动化脚本编写,以及异地备份方案。
前言
硬盘会坏,服务器会挂,勒索病毒会加密你的文件。
没有备份的数据,等于不存在。
今天聊聊如何建立可靠的备份体系。
一、备份基础知识
1.1 3-2-1备份原则
3 2 1 ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 3份数据 │ │ 2种介质 │ │ 1份异地 │ │ │ │ │ │ │ │ 原始+ │ │ 硬盘+ │ │ 云存储/ │ │ 备份1+ │ │ 云存储 │ │ 另一地点 │ │ 备份2 │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘- 3份数据:原始数据 + 至少2份备份
- 2种介质:不同类型的存储(如本地硬盘+云存储)
- 1份异地:至少一份存放在不同地点
1.2 备份类型
| 类型 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 全量备份 | 备份所有数据 | 恢复简单 | 耗时、占空间 |
| 增量备份 | 只备份上次后变化的 | 快、省空间 | 恢复需要全部增量 |
| 差异备份 | 备份上次全量后变化的 | 折中方案 | 空间占用递增 |
1.3 备份策略示例
周日 周一 周二 周三 周四 周五 周六 全量 增量 增量 增量 增量 增量 增量 ↓ 下周日 全量(覆盖或保留)二、常用备份工具
2.1 rsync - 文件同步神器
# 基本用法rsync-avz /source/ /backup/# 常用选项# -a: 归档模式(保留权限、时间等)# -v: 详细输出# -z: 压缩传输# -n: 预演,不真正执行# --delete: 删除目标中源没有的文件# 本地备份rsync-avz /var/www/ /backup/www/# 远程备份(SSH)rsync-avz /var/www/ user@backup-server:/backup/www/# 排除某些文件rsync-avz --exclude='*.log'--exclude='cache/'/var/www/ /backup/www/# 限速(单位KB/s)rsync-avz --bwlimit=5000/source/ /backup/2.2 tar - 打包压缩
# 创建压缩备份tar-czvf backup_$(date+%Y%m%d).tar.gz /var/www/# 常用选项# -c: 创建# -x: 解压# -z: gzip压缩# -v: 详细输出# -f: 指定文件名# 排除文件tar-czvf backup.tar.gz --exclude='*.log'/var/www/# 解压tar-xzvf backup.tar.gz -C /restore/2.3 rclone - 云存储同步
# 安装curlhttps://rclone.org/install.sh|sudobash# 配置云存储rclone config# 按提示配置阿里云OSS、腾讯云COS、AWS S3等# 同步到云存储rclonesync/backup/ remote:bucket-name/backup/# 加密备份rclonesync/backup/ remote:bucket-name/backup/ --crypt-remote# 查看云存储文件rclonelsremote:bucket-name/2.4 restic - 现代化备份工具
# 安装aptinstallrestic# 初始化仓库restic init --repo /backup/restic-repo# 设置密码# 备份restic -r /backup/restic-repo backup /var/www/# 查看快照restic -r /backup/restic-repo snapshots# 恢复restic -r /backup/restic-repo restore latest --target /restore/# 优点:# - 去重(节省空间)# - 加密# - 支持多种后端(本地、S3、SFTP等)三、自动化备份脚本
3.1 基础备份脚本
#!/bin/bash# backup.sh - 基础备份脚本# 配置BACKUP_SRC="/var/www /home/user/data"BACKUP_DST="/backup"BACKUP_NAME="backup_$(date+%Y%m%d_%H%M%S)"LOG_FILE="/var/log/backup.log"KEEP_DAYS=7# 日志函数log(){echo"[$(date'+%Y-%m-%