Debian Java项目如何备份与恢复
小樊
32
2025-12-05 00:17:56
Debian Java项目备份与恢复实操指南
一 备份范围与策略
- 备份范围建议覆盖:应用代码与配置(如**/opt/myapp**、/var/lib/myapp)、外部化配置(如**/etc/myapp/)、日志(如/var/log/myapp/)、构建产物(如target/或build/)、以及数据库(如MySQL/PostgreSQL**)。
- 备份策略建议:日常做全量+增量,关键数据做异地/离线副本;对数据库采用逻辑备份(导出SQL)或物理备份(文件系统/快照);对大型日志可按日归档并定期清理。
- 一致性建议:对写入频繁的应用,备份前尽量短暂停写或切换维护模式;数据库备份优先使用应用停写+导出或事务一致性快照的方式。
二 备份步骤与常用命令
- 应用与配置打包(示例):
- 全量打包并排除易变或易重建目录:
tar -czvf myapp_$(date +%F).tar.gz -C /opt myapp --exclude=myapp/logs --exclude=myapp/tmp --exclude=myapp/build
- 仅备份配置与数据子目录:
tar -czvf myapp_conf_$(date +%F).tar.gz /opt/myapp/conf /var/lib/myapp /etc/myapp
- 数据库备份:
- MySQL:
mysqldump -uuser -ppassword --single-transaction --routines --triggers --hex-blob dbname > backup_$(date +%F).sql
- PostgreSQL:
pg_dump -U user -h localhost -F c -b -v -f backup_$(date +%F).dump dbname
- 增量与远程同步:
- 本地/远程增量同步(首次全量,其后增量):
rsync -avz --delete /opt/myapp/ backup@backup01:/data/backup/myapp/
- 自动化与工具:
- 定时任务(每日02:00全量打包):
crontab -e
0 2 * * * /usr/local/bin/backup_myapp.sh
- 使用BackupNinja编排备份任务(安装、向导配置、执行):
sudo apt-get install backupninja
sudo ninja-config --name mybackup
sudo ninja-backup mybackup
- 备份保留与校验:
- 保留7–30天并做校验和(示例):
sha256sum myapp_.tar.gz > checksums.sha256
find /backup -name "myapp_.tar.gz" -mtime +30 -delete
三 恢复步骤与示例
- 应用与配置恢复:
- 解压到目标路径(保持权限与时间戳):
sudo tar -xzvf myapp_2025-12-05.tar.gz -C /
- 仅恢复配置:
sudo tar -xzvf myapp_conf_2025-12-05.tar.gz -C /
- 数据库恢复:
- MySQL:
mysql -uuser -ppassword dbname < backup_2025-12-05.sql
- PostgreSQL:
pg_restore -U user -h localhost -d dbname -v backup_2025-12-05.dump
- 增量/远程恢复:
- 将增量数据同步回本地:
rsync -avz --delete backup@backup01:/data/backup/myapp/ /opt/myapp/
- 使用BackupNinja恢复:按所用工具的文档执行恢复流程(如 ninja-restore 等)。
四 环境与构建链备份
- APT环境备份与恢复(适用于通过APT安装的JDK/依赖):
- 备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
apt list --installed > /backup/java_packages.txt
- 恢复:
sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
sudo apt-get update
sudo apt-get install --reinstall $(cat /backup/java_packages.txt)
- 手动安装的JDK/JRE目录备份与恢复:
- 备份:
sudo tar -czvf jdk_backup_$(date +%F).tar.gz -C /usr/lib/jvm .
- 恢复:
sudo tar -xzvf jdk_backup_$(date +%F).tar.gz -C /usr/lib/jvm
- 环境变量与Shell配置:
- 备份:
sudo cp /etc/environment /etc/environment.bak
cp ~/.bashrc ~/.bashrc.bak
- 恢复:
sudo cp /etc/environment.bak /etc/environment
source /etc/environment && source ~/.bashrc
- 构建链(Maven/Gradle)与本地仓库:
- 建议纳入版本控制或制品仓库(如Nexus/Artifactory);如必须备份本地仓库,可打包**~/.m2/repository或~/.gradle/caches**,并在恢复后执行mvn clean install或gradle build验证。
五 自动化与最佳实践
- 备份脚本模板(含校验与保留):
- 示例:
#!/usr/bin/env bash
set -Eeuo pipefail
APP_DIR=“/opt/myapp”
BACKUP_DIR=“/backup/myapp”
TS=$(date +%F)
mkdir -p “$BACKUP_DIR”
tar -czvf “$BACKUP_DIR/app_$TS.tar.gz” -C “$APP_DIR” . --exclude=“$APP_DIR/logs” --exclude=“$APP_DIR/tmp”
sha256sum “$BACKUP_DIR/app_$TS.tar.gz” >> “$BACKUP_DIR/checksums.sha256”
find “$BACKUP_DIR” -name “app_*.tar.gz” -mtime +14 -delete
- 定时任务:
- 每日02:00执行:
0 2 * * * /usr/local/bin/backup_myapp.sh >> /var/log/backup_myapp.log 2>&1
- 远程与加密传输:
- 可用Duplicity做加密增量备份,或使用rsync通过SSH进行安全传输;重要备份建议至少两份异地副本。
- 验证与演练:
- 定期做恢复演练与校验和验证,确保备份可用;对数据库恢复优先在预备环境验证一致性。