PSI进销存软件数据备份与灾难恢复
备份策略的重要性
进销存软件存储着企业的核心业务数据,包括客户信息、库存记录、交易订单等。数据丢失可能造成不可挽回的损失。完善的备份策略需要考虑:备份频率、备份类型、存储位置、恢复时间目标(RTO)和恢复点目标(RPO)等因素。
备份策略设计
| 备份类型 | 执行频率 | 保留时间 | 用途 |
|---|---|---|---|
| 全量备份 | 每天凌晨 | 30天 | 基础备份 |
| 增量备份 | 每6小时 | 7天 | 减少备份时间 |
| 事务日志 | 每15分钟 | 3天 | point-in-time恢复 |
| 配置文件 | 每次修改 | 90天 | 快速恢复配置 |
数据库备份脚本
#!/bin/bash
# backup.sh
# 配置
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_HOST="localhost"
DB_USER="backup_user"
DB_PASS="xxxxx"
DB_NAME="psi_db"
REMOTE_BACKUP="s3://psi-backup/mysql"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 全量备份
echo "Starting full backup at $(date)"
mysqldump -h$DB_HOST -u$DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
--events \
$DB_NAME | gzip > $BACKUP_DIR/full_$DATE.sql.gz
# 验证备份文件
if [ $? -eq 0 ]; then
echo "Backup completed successfully"
# 计算校验和
md5sum $BACKUP_DIR/full_$DATE.sql.gz > $BACKUP_DIR/full_$DATE.sql.gz.md5
else
echo "Backup failed!"
exit 1
fi
# 同步到远程存储
aws s3 cp $BACKUP_DIR/full_$DATE.sql.gz $REMOTE_BACKUP/
aws s3 cp $BACKUP_DIR/full_$DATE.sql.gz.md5 $REMOTE_BACKUP/
# 清理本地过期备份(保留7天)
find $BACKUP_DIR -name "full_*.sql.gz" -mtime +7 -delete
echo "Backup finished at $(date)"
自动备份调度
使用 crontab 配置定时任务:
# crontab -e # 每天凌晨2点全量备份 0 2 * * * /opt/psi/scripts/backup.sh full # 每6小时增量备份 0 */6 * * * /opt/psi/scripts/backup.sh incremental # 每15分钟备份事务日志 */15 * * * * /opt/psi/scripts/backup.sh binlog # 每天凌晨3点清理过期备份 0 3 * * * /opt/psi/scripts/cleanup.sh # 每周日凌晨4点验证备份完整性 0 4 * * 0 /opt/psi/scripts/verify_backup.sh
异地备份方案
为防止本地灾难,需要异地备份:
- 云存储备份:自动同步到阿里云OSS、AWS S3等
- 异地机房备份:在不同地理位置的机房建立备份
- 混合云备份:本地+云端双重保障
- 离线备份:定期导出到离线存储介质
备份验证
定期验证备份的可用性:
- 文件完整性:检查备份文件大小和MD5校验和
- 可恢复性测试:恢复到测试环境验证数据完整性
- 结构验证:确保表结构、索引、视图等正确
- 数据抽样:抽样比对关键数据准确性
灾难恢复流程
#!/bin/bash # restore.sh set -e BACKUP_FILE=$1 TARGET_DATE=$2 echo "Starting restore process..." # 1. 停止应用服务 docker-compose down # 2. 恢复数据库 echo "Restoring database..." gunzip < $BACKUP_FILE | mysql -h localhost -u root -p psi_db # 3. 验证数据 echo "Verifying data..." mysql -h localhost -u root -p psi_db -e "SELECT COUNT(*) as table_count FROM information_schema.tables WHERE table_schema='psi_db';" # 4. 重启服务 docker-compose up -d # 5. 健康检查 sleep 10 curl -f http://localhost:3000/health || exit 1 echo "Restore completed successfully!"
RTO/RPO 目标
| 灾难场景 | RTO(恢复时间目标) | RPO(恢复点目标) |
|---|---|---|
| 单表误删除 | 15分钟 | 15分钟 |
| 服务器故障 | 1小时 | 6小时 |
| 机房级灾难 | 4小时 | 24小时 |
恢复演练
- 定期演练:每季度进行一次完整的恢复演练
- 文档更新:根据演练结果更新恢复文档
- 团队培训:确保每个运维人员熟悉恢复流程
- 时间记录:记录实际恢复时间,优化流程