第一步:先摸透当前系统的灾备死穴
操作1:收集核心数据清单
先找一份当前档案管理系统的运维手册/数据库说明书,确认以下必存内容,列成可编辑的TXT/Excel表格:
- 结构化数据:数据库名、表名、字段关键备注(比如“档案编号是唯一主键不能丢”)
- 非结构化数据:存储路径(比如Windows下的D:\archive_files,Linux下的/var/www/archive)、文件类型(扫描件PDF、电子文档DOCX、音视频MP4)、单文件/整体存储大小
- 系统配置文件:部署路径、端口、依赖库版本号、管理员权限信息的安全备份密钥(后续加密用)
操作2:做一次当前灾备的极限测试
用低风险方式模拟小范围故障,检查恢复时间(RTO)、恢复数据量(RPO):
- 先手动备份100条测试档案和对应配置
- Windows系统:临时重命名测试数据库的主表;Linux系统:临时chmod 000测试数据库/存储文件夹
- 记录从发现故障到完全恢复100条测试档案的时间(精确到分钟)和数据丢失情况
- 恢复后立即还原权限/表名,防止正式业务受影响
如果RTO超过2小时、RPO丢失超过1条数据,必须做后面的两步。
第二步:搭数据「本地+云端」的双重异地备份
操作1:本地自动定时全量+增量备份
不管是Windows还是Linux,用免费开源的Restic(https://restic.net/downloads 直接下载对应系统的二进制文件,无需安装,解压即可用):
Windows系统配置(解压后把restic.exe放D:\backup_tools)
1. 打开记事本,粘贴以下可直接复制的代码,保存为auto_backup.bat(编码选ANSI,防止中文乱码):
```batch
@echo off
set RESTIC_REPOSITORY=D:\local_archive_backup
set RESTIC_PASSWORD=你自己设置的16位以上混合密码(字母+数字+符号)
set RESTIC_PATH=D:\archive_files
set RESTIC_DB_PATH=D:\mysql\data\archive_db
set RESTIC_CONFIG_PATH=C:\xampp\apache\conf\extra\httpd-archive.conf
:: 检查本地备份仓库是否存在,不存在则初始化
if not exist "D:\local_archive_backup\config" (
D:\backup_tools\restic.exe init
)
:: 先做全量备份(每周日凌晨2点全量,这里用%date%变量判断,但为了通用可以简化,手动指定全量的话,把下面的--tag改成weekly_full)
D:\backup_tools\restic.exe backup %RESTIC_PATH% %RESTIC_DB_PATH% %RESTIC_CONFIG_PATH% --tag daily
:: 保留最近7天的增量备份、最近4周的全量备份、最近6个月的月度全量备份
D:\backup_tools\restic.exe forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
:: 清理临时文件
del /q /f %temp%\restic
```
2. 打开Windows任务计划程序(Win+S输入“任务计划程序”):
- 点击右侧「创建基本任务」,名称填「档案系统每日自动备份」
- 触发器选「每天」,开始时间设为凌晨2点
- 操作选「启动程序」,程序或脚本选刚才保存的auto_backup.bat
- 最后勾选「不管用户是否登录都要运行」和「使用最高权限运行」,点击确定
Linux系统配置(以Ubuntu/Debian为例,root用户操作)
1. 安装Restic:
```bash
apt update && apt install restic -y
```

2. 创建备份仓库(假设本地仓库路径为/mnt/usb_backup,记得插个容量是档案总容量2倍以上的USB3.0/4.0移动硬盘并挂载):
```bash
export RESTIC_REPOSITORY=/mnt/usb_backup
export RESTIC_PASSWORD=你自己设置的16位以上混合密码
restic init
```
3. 打开记事本(Linux用vim),粘贴以下可直接复制的代码,保存为/usr/local/bin/auto_archive_backup.sh,并赋予执行权限:
```bash
!/bin/bash
export RESTIC_REPOSITORY=/mnt/usb_backup
export RESTIC_PASSWORD=你自己设置的16位以上混合密码
export RESTIC_PATH=/var/www/archive
export RESTIC_DB_PATH=/var/lib/mysql/archive_db
export RESTIC_CONFIG_PATH=/etc/apache2/sites-available/archive.conf
先备份数据库到临时文件(防止热备份不完整,MySQL用mysqldump,PostgreSQL用pg_dump)
mysqldump -u root -p你的MySQLroot密码 archive_db > /tmp/archive_db_temp.sql
执行备份
restic backup $RESTIC_PATH $RESTIC_CONFIG_PATH /tmp/archive_db_temp.sql --tag daily
清理临时文件
rm /tmp/archive_db_temp.sql
保留策略和Windows一致
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
```
4. 赋予执行权限并添加定时任务:
```bash
chmod +x /usr/local/bin/auto_archive_backup.sh
crontab -e
在文件末尾添加一行(每天凌晨2点执行)
0 2 /usr/local/bin/auto_archive_backup.sh
```
操作2:云端自动同步增量备份
用免费开源的Rclone(https://rclone.org/downloads/ 直接下载对应系统的二进制文件,无需安装),把本地备份仓库每天的增量同步到阿里云OSS/腾讯云COS的低频存储(成本约0.08元/GB/月):
- 先在阿里云/腾讯云控制台开一个低频访问存储类型的Bucket,开启版本控制(防止误删)
- 配置Rclone和云存储的连接(按官网https://rclone.org/s3/ 或 https://rclone.org/cos/ 的步骤,选「自动配置」在浏览器里授权最快)
- 在刚才的auto_backup.bat或auto_archive_backup.sh的最后添加同步命令(假设云存储连接名是cloud_archive,Bucket路径是cloud_archive:local_archive_backup):
```batch
:: Windows添加到auto_backup.bat末尾
D:\backup_tools\rclone.exe sync D:\local_archive_backup cloud_archive:local_archive_backup --progress --delete-after
```
```bash
Linux添加到auto_archive_backup.sh末尾
rclone sync /mnt/usb_backup cloud_archive:local_archive_backup --progress --delete-after
```
第三步:提前写好10分钟内能启动的灾难恢复脚本
操作1:写系统级快速恢复脚本
同样用Restic,分别写Windows/Linux的恢复脚本,保存到本地备份仓库的根目录和云存储Bucket的根目录:
Windows恢复脚本restore.bat(编码ANSI)
```batch
@echo off
set /p RESTIC_REPOSITORY=请输入本地/云同步后的备份仓库路径(比如D:\local_archive_backup):
set /p RESTIC_PASSWORD=请输入备份仓库密码:
set /p RESTIC_TAG=请输入要恢复的备份标签(比如daily):
set /p RESTIC_TARGET=请输入恢复到的目标路径(比如D:\):
:: 列出所有符合标签的备份快照
D:\backup_tools\restic.exe snapshots --tag %RESTIC_TAG%
:: 让用户输入快照ID(比如abc123def)
set /p SNAPSHOT_ID=请输入要恢复的快照ID:
:: 执行恢复
D:\backup_tools\restic.exe restore %SNAPSHOT_ID% --target %RESTIC_TARGET%
echo 恢复完成!请手动重启档案管理系统和数据库!
pause
```
Linux恢复脚本restore.sh
```bash
!/bin/bash
read -p "请输入本地/云同步后的备份仓库路径(比如/mnt/usb_backup):" RESTIC_REPOSITORY
read -s -p "请输入备份仓库密码:" RESTIC_PASSWORD
echo ""
read -p "请输入要恢复的备份标签(比如daily):" RESTIC_TAG
read -p "请输入恢复到的目标路径(比如/):" RESTIC_TARGET
export RESTIC_REPOSITORY=$RESTIC_REPOSITORY
export RESTIC_PASSWORD=$RESTIC_PASSWORD
列出所有符合标签的备份快照
restic snapshots --tag $RESTIC_TAG
让用户输入快照ID
read -p "请输入要恢复的快照ID:" SNAPSHOT_ID
执行恢复
restic restore $SNAPSHOT_ID --target $RESTIC_TARGET
echo "恢复完成!请手动重启档案管理系统和数据库!"
```
记得给Linux的restore.sh赋予执行权限:
```bash
chmod +x /mnt/usb_backup/restore.sh
```
操作2:每两周做一次恢复演练
找一台和正式服务器配置相近的测试机/虚拟机,按照以下步骤演练:
- 完全格式化测试机的系统盘+数据盘,模拟硬盘全损
- 安装和正式系统一致的操作系统、数据库、依赖库
- 从本地备份仓库或云存储Bucket下载恢复脚本和必要的备份工具
- 执行恢复脚本,记录RTO和RPO
- 如果RTO超过15分钟,优化依赖库的安装方式(比如做成Docker镜像)