温馨提示×

Java应用在Linux如何进行备份恢复

小樊
34
2025-12-27 20:38:50
栏目: 编程语言

Java应用在Linux的备份与恢复实操指南

一 备份范围与前置准备

  • 明确备份范围:包括数据库数据应用代码与配置日志、以及Java运行环境(如 JDK/JRE 版本与安装路径)。
  • 选择备份目标:优先使用外部磁盘/网络存储/云存储,避免与业务同盘,提升容灾能力。
  • 一致性策略:对写入频繁的数据,建议先停止应用或使用具备一致性能力的工具;对允许极小窗口的场景,可采用文件系统快照数据库热备方案。
  • 版本记录:保存Java版本(java -version)安装路径、应用启动脚本/服务单元文件、以及关键配置项(如 application.yml、logback.xml)。
  • 目标与指标:结合业务设定RPO/RTO并定期演练验证。RPO≈允许丢失的数据时间窗口,RTO≈从故障到恢复可用的时间。

二 数据库备份与恢复

  • MySQL/MariaDB
    • 备份:
      • 常规导出:mysqldump -u [user] -p [db] > /backup/[db]_$(date +%Y%m%d).sql
      • 压缩导出:mysqldump -u [user] -p [db] | gzip > [db]_$(date +%Y%m%d).sql.gz
    • 恢复:
      • 常规导入:mysql -u [user] -p [db] < [db]_20250101.sql
      • 压缩导入:gunzip < [db]_20250101.sql.gz | mysql -u [user] -p [db]
  • PostgreSQL
    • 备份:pg_dump -U [user] -W -F c [db] > [db].dump(-F c 为自定义格式,便于压缩与选择性恢复)
    • 恢复:pg_restore -U [user] -d [db] [db].dump
  • 建议:为数据库备份单独保留保留周期异地副本,并在恢复前进行导入校验(如行数、关键表抽样)。

三 应用与配置文件的备份与恢复

  • 文件系统与代码配置
    • 打包备份:tar -czvf app_$(date +%Y%m%d).tar.gz -C /opt/myapp .(包含 config、bin、lib、resources 等)
    • 增量同步:rsync -avzh --delete /opt/myapp/ /backup/myapp/(注意源目录末尾斜杠,表示同步目录内容)
  • 运行环境备份
    • Ubuntu/Debian:sudo apt-clone clone /backup/java_packages.apt-clone,恢复用 sudo apt-clone restore /backup/java_packages.apt-clone
    • 通用做法:记录 java -versionJAVA_HOME,恢复时安装相同版本 JDK 并校验 JAVA_HOME、PATH。
  • 日志管理
    • 使用 logrotate 轮转压缩与清理,示例:
      /opt/myapp/logs/*.log { daily; rotate 7; compress; missingok; notifempty; create 0644 app app }
  • 容器化场景(若使用 Docker)
    • 镜像:docker save -o myapp.tar myapp:tag
    • 数据卷:单独备份挂载卷目录(如 /var/lib/docker/volumes/ 下对应卷的实际路径)。

四 自动化与工具化方案

  • 定时任务
    • 每天 02:00 执行备份脚本:0 2 * * * /bin/bash /opt/backup/backup.sh
  • 脚本骨架示例(可按需扩展数据库与校验步骤)
    #!/usr/bin/env bash
    set -e
    BACKUP_DIR="/backup/javaapp"
    TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
    APP_DIR="/opt/myapp"
    DB_NAME="myapp"
    
    mkdir -p "$BACKUP_DIR"
    
    # 1) 数据库
    mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" \
      | gzip > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz"
    
    # 2) 应用与配置
    tar -czf "$BACKUP_DIR/app_${TIMESTAMP}.tar.gz" -C "$APP_DIR" .
    
    # 3) 可选:校验
    gunzip -t "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz" || { echo "DB backup corrupt"; exit 1; }
    tar -tzf "$BACKUP_DIR/app_${TIMESTAMP}.tar.gz" >/dev/null || { echo "App backup corrupt"; exit 1; }
    
    # 4) 清理旧备份(保留最近7天)
    find "$BACKUP_DIR" -type f -mtime +7 -delete
    
  • 工具化方案
    • Restic:加密去重,适合多环境统一备份与异地/云端存储。
    • BorgBackup:高效增量与去重,支持本地或 SSH 目标。
    • Duplicity:支持加密与多种远程协议(如 S3、FTP)。
    • Timeshift(系统级快照):适合连同系统配置一起回滚(对应用配置变更频繁的场景很有用)。

五 恢复流程与演练要点

  • 标准恢复步骤
    1. 准备:确认目标环境、磁盘空间与网络可达,必要时停止应用
    2. 数据库:按数据库类型执行导入(如 mysql < xxx.sqlpg_restore -d db xxx.dump)。
    3. 应用与配置:
      • 打包恢复:tar -xzvf app_20250101.tar.gz -C /opt/myapp
      • 增量同步:rsync -avzh /backup/myapp/ /opt/myapp/
    4. 运行环境:安装相同 JDK 版本,恢复 JAVA_HOME 与启动脚本(如 systemd unit)。
    5. 启动与自检:启动应用,检查日志与关键业务接口。
  • 容器化恢复
    • 镜像:docker load -i myapp.tar
    • 数据卷:将备份的数据卷内容恢复到新卷或目标路径后启动容器。
  • 验证与演练
    • 完整性校验:对压缩包执行 gunzip -t/tar -tzf,对数据库做行数/校验和/抽样查询
    • 定期演练:按季度或半年度进行真实恢复演练,验证 RPO/RTO 达标,并据此优化备份频率与保留策略。

0