PSI进销存软件

进销存软件编程技术展示与积累

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

异地备份方案

为防止本地灾难,需要异地备份:

备份验证

定期验证备份的可用性:

  1. 文件完整性:检查备份文件大小和MD5校验和
  2. 可恢复性测试:恢复到测试环境验证数据完整性
  3. 结构验证:确保表结构、索引、视图等正确
  4. 数据抽样:抽样比对关键数据准确性

灾难恢复流程

#!/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小时

恢复演练

← 下一篇:PSI进销存系统分布式架构与高并发设计 上篇:PSI进销存系统消息通知中心设计 →