温馨提示×

CentOS Java备份与恢复方案

小樊
36
2025-11-23 17:45:12
栏目: 编程语言

CentOS Java备份与恢复方案

一 备份范围与策略

  • 备份范围建议覆盖以下四类关键资产:
    • Java运行环境 JRE/JDK:如 /usr/lib/jvm//usr/java/ 下的目录,包含 bin、lib、jre 等子目录。
    • 应用与配置:业务应用目录(如 /opt/app)、配置与密钥(如 /etc/ 下的应用配置、环境变量脚本 /etc/profile.d/java.sh 等)。
    • 持久化数据:应用产生的文件、缓存、上传目录等(如 /var/lib/yourapp)。
    • 数据库与日志:关系型数据库(如 MySQL/MariaDB)与 Java 日志(如 /var/log/yourapp/)。
  • 备份策略建议:
    • 采用“全量 + 增量”组合;全量每日/每周,增量按小时或按日执行。
    • 明确 RTO/RPO 目标(如 RTO ≤ 2小时、RPO ≤ 1小时),据此安排频率与保留周期。
    • 备份目标优先“本地快速恢复 + 远端/云端长期保留”,并启用加密与校验保障安全与可用性。

二 备份实施步骤

    1. 定位 Java 安装目录
    • 查找命令:ls /usr/lib/jvm/ls /usr/java/readlink -f $(which java)update-alternatives --display java
    • 备份命令示例:tar -czvf java_backup_$(date +%F).tar.gz -C /usr/lib/jvm/ .(按实际路径调整)。
    1. 备份应用与配置
    • 示例:tar -czvf app_conf_backup_$(date +%F).tar.gz /opt/app /etc/yourapp /etc/profile.d/java.sh /var/lib/yourapp
    1. 数据库备份(以 MySQL 为例)
    • 示例:mysqldump -u USER -pPASSWORD --single-transaction --routines --triggers --databases yourdb > /backup/db_yourdb_$(date +%F).sql
    1. 日志备份与轮转
    • 使用 logrotate(推荐):创建 /etc/logrotate.d/java
      /var/log/yourapp/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0644 app app
      }
      
      测试:logrotate -d /etc/logrotate.d/java;使配置生效:systemctl reload logrotate
    • 或使用脚本归档与清理(示例保留 30 天):
      #!/usr/bin/env bash
      BACKUP_DIR="/backup/java_logs"
      DATE=$(date +%F)
      mkdir -p "$BACKUP_DIR"
      cp /var/log/yourapp/*.log "$BACKUP_DIR/${DATE}.log"
      find "$BACKUP_DIR" -mtime +30 -type f -name "*.log" -delete
      
    1. 全量与增量文件备份
    • 全量:rsync -aAX --delete /opt/app /backup/app_full/$(date +%F)/
    • 增量(基于上次全量/增量):rsync -aAX --delete --link-dest=/backup/app_incr/last/ /opt/app /backup/app_incr/$(date +%F)/ && ln -sfn $(date +%F) /backup/app_incr/last
    1. 加密与异地/云端备份(以 Restic 为例)
    • 初始化仓库:restic init --repo /backup/restic_repo
    • 备份:restic --repo /backup/restic_repo backup /opt/app /usr/lib/jvm /var/lib/yourapp /etc/yourapp
    • 设置定时任务(如每日 2:00):0 2 * * * /usr/bin/restic --repo /backup/restic_repo backup ...

三 恢复实施步骤

    1. 恢复 Java 运行环境
    • 示例:tar -xzvf java_backup_2025-08-01.tar.gz -C /usr/lib/jvm/
    • 设置默认版本:alternatives --config java(按提示选择),或创建软链:ln -sfn /usr/lib/jvm/java-11-openjdk /usr/java/default
    1. 恢复应用与配置
    • 示例:tar -xzvf app_conf_backup_2025-08-01.tar.gz -C /
    1. 恢复数据库
    • 示例:mysql -u USER -pPASSWORD < /backup/db_yourdb_2025-08-01.sql
    1. 恢复日志(若使用脚本归档)
    • 示例:cp /backup/java_logs/2025-08-01.log /var/log/yourapp/
    1. 从 Restic 恢复
    • 最新快照:restic --repo /backup/restic_repo restore latest --target /restore/
    • 指定快照:restic --repo /backup/restic_repo restore <snapshot-id> --target /restore/
    1. 启动与验证
    • 重启应用/服务:systemctl restart yourapp
    • 验证:java -versionps -ef | grep javacurl -I http://localhost:8080/health

四 自动化与验证

  • 自动化
    • 使用 crontab 统一调度备份任务(示例见上文脚本注释),并将日志输出到 /var/log/backup.log
    • Restic 配置环境变量文件(如 /etc/restic/env)存放 RESTIC_REPOSITORY、RESTIC_PASSWORD,脚本中直接调用 restic 命令。
  • 验证与演练
    • 定期执行“恢复演练”:随机抽取最近一次备份,在测试环境恢复并校验关键功能与数据一致性。
    • 校验要点:文件数量/大小、数据库记录数、应用启动与接口可用性、日志连续性。

五 常见场景与注意事项

  • 场景建议
    • 版本回退:先备份当前 /usr/lib/jvm/alternatives 配置,再恢复旧版本 JDK,最后用 alternatives 切换。
    • 误删文件:优先从 Restic 快照恢复;若无,尝试文件恢复工具(如 TestDisk),但成功率取决于磁盘写入情况。
    • 日志暴涨:优先依赖 logrotate 轮转压缩与保留策略,避免磁盘被占满导致应用异常。
  • 注意事项
    • 备份命令中的路径需按实际环境调整;对包含空格或特殊字符的路径加引号。
    • 执行 tar/rsync 时注意排除无关目录(如 /proc、/sys、/lost+found、/mnt),避免无效数据与性能问题。
    • 数据库备份建议使用 --single-transaction(InnoDB)确保一致性,并定期校验备份可恢复性。
    • 备份数据包含敏感信息时务必加密存储与传输,并限制访问权限。

0