温馨提示×

C++项目在CentOS如何备份恢复

小樊
37
2025-11-21 22:41:17
栏目: 编程语言

C++项目在 CentOS 的备份与恢复

一、备份范围与策略

  • 建议将备份分为三层:
    • 代码与构建产物:如 /home/dev/myproj/(含 src/include/CMakeLists.txtMakefile、以及 build/out/ 等)。
    • 运行环境关键配置:至少覆盖 /etc/ 中与项目相关的配置(如服务单元、环境变量、依赖库配置等),必要时补充 /var/ 中项目数据目录。
    • 数据库与缓存:如项目使用 MySQL/PostgreSQL/Redis,需单独备份数据库;缓存通常不纳入代码仓库与文件备份。
  • 备份方式选型:
    • 日常开发与短期留存:优先用 tar 归档或 rsync 同步到本地/远程目录。
    • 跨机或异地容灾:用 rsync 做定期/持续同步,或结合对象存储/备份服务器。
    • 整盘级灾难恢复:仅在明确需求下使用 dd 镜像(风险高,谨慎操作)。

二、常用备份方法速查

  • 使用 tar 归档项目目录(适合打包与迁移)
    • 备份:tar -czvf myproj_$(date +%F_%H-%M-%S).tar.gz -C /home/dev myproj
    • 恢复:sudo tar -xzvf myproj_2025-11-21_10-00-00.tar.gz -C /
  • 使用 rsync 同步到本地或远程(适合日常增量与快速回滚)
    • 本地/挂载盘:rsync -av --delete /home/dev/myproj/ /backup/myproj/
    • 远程主机:rsync -avz --delete -e ssh /home/dev/myproj/ user@backup-server:/backup/myproj/
  • 使用 dd 做整盘镜像(仅限整盘恢复场景,务必谨慎)
    • 备份:sudo dd if=/dev/sda of=/backup/disk.img bs=4M status=progress
    • 恢复:sudo dd if=/backup/disk.img of=/dev/sda bs=4M status=progress
  • 说明:tar/rsync 为通用文件级方案;dd 为块级镜像,操作前务必确认设备与分区,避免数据覆盖。

三、自动化备份脚本与定时任务

  • 示例脚本 backup.sh(归档项目 + 关键配置,保留最近 7 天)
    • 保存为 /usr/local/bin/backup_myproj.sh,执行 chmod +x /usr/local/bin/backup_myproj.sh
    • 内容:
      #!/usr/bin/env bash
      set -Eeuo pipefail
      
      PROJ_SRC="/home/dev/myproj"
      BACKUP_BASE="/backup/myproj"
      DATE=$(date +%F_%H-%M-%S)
      KEEP_DAYS=7
      
      mkdir -p "$BACKUP_BASE/$DATE"
      
      # 1) 项目代码与构建产物
      tar -czf "$BACKUP_BASE/$DATE/myproj.tar.gz" -C "$PROJ_SRC" .
      
      # 2) 关键配置(可按需增删)
      mkdir -p "$BACKUP_BASE/$DATE/etc"
      rsync -a --delete /etc/yum.repos.d/ "$BACKUP_BASE/$DATE/etc/yum.repos.d/"
      # 示例:若项目有 systemd 服务
      # sudo cp /etc/systemd/system/myproj.service "$BACKUP_BASE/$DATE/etc/systemd/system/" 2>/dev/null || true
      
      # 清理旧备份
      find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +$KEEP_DAYS -exec rm -rf {} +
      
      echo "Backup finished at $DATE -> $BACKUP_BASE/$DATE"
      
  • 定时任务(每天 02:00 执行)
    • 执行 crontab -e,添加:
      0 2 * * * /usr/local/bin/backup_myproj.sh >> /var/log/backup_myproj.log 2>&1
      
  • 说明:脚本中已对关键目录做归档与清理;如涉及 systemd 服务单元,请按需加入备份与恢复步骤。

四、恢复步骤与验证

  • 场景一:仅恢复项目代码与构建产物
    • 停止服务:sudo systemctl stop myproj || true
    • 恢复:sudo tar -xzvf /backup/myproj/2025-11-21_10-00-00/myproj.tar.gz -C /home/dev/
    • 重新构建与启动:cd /home/dev/myproj && cmake -B build && cmake --build build && sudo systemctl start myproj
  • 场景二:恢复关键配置
    • 配置:sudo rsync -a --delete /backup/myproj/2025-11-21_10-00-00/etc/yum.repos.d/ /etc/yum.repos.d/
    • 如包含服务单元:sudo cp /backup/myproj/2025-11-21_10-00-00/etc/systemd/system/myproj.service /etc/systemd/system/ && sudo systemctl daemon-reload
  • 场景三:整盘级恢复(使用 dd 镜像)
    • 仅在相同硬件/分区布局下执行:sudo dd if=/backup/disk.img of=/dev/sda bs=4M status=progress,重启后校验文件系统与引导。
  • 验证要点
    • 代码版本一致:git status(若纳入 git);构建通过;关键功能冒烟测试;服务端口与进程正常;配置文件权限与所有者正确。

五、注意事项与最佳实践

  • 权限与安全:备份与恢复全程使用具备相应权限的账号;归档与传输时注意文件权限、属主与敏感信息脱敏。
  • 一致性:数据库与应用一致性要求高时,先停写或使用支持一致性的备份方式;文件级备份尽量在维护窗口进行。
  • 版本与回滚:为每次备份打上时间戳变更说明;保留合理的历史窗口(如 7–30 天),便于快速回滚。
  • 异地与多副本:至少保留一份异地/离线副本;定期做恢复演练,验证备份可用性与完整性。
  • 风险提示:涉及 dd、分区与系统目录写入的操作具有数据丢失风险;务必在非生产环境验证做好完整备份后再执行。

0