Java应用在Linux的备份与恢复实操指南
一 备份范围与前置准备
二 数据库备份与恢复
mysqldump -u [user] -p [db] > /backup/[db]_$(date +%Y%m%d).sqlmysqldump -u [user] -p [db] | gzip > [db]_$(date +%Y%m%d).sql.gzmysql -u [user] -p [db] < [db]_20250101.sqlgunzip < [db]_20250101.sql.gz | mysql -u [user] -p [db]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/(注意源目录末尾斜杠,表示同步目录内容)sudo apt-clone clone /backup/java_packages.apt-clone,恢复用 sudo apt-clone restore /backup/java_packages.apt-clonejava -version 与 JAVA_HOME,恢复时安装相同版本 JDK 并校验 JAVA_HOME、PATH。/opt/myapp/logs/*.log { daily; rotate 7; compress; missingok; notifempty; create 0644 app app }docker save -o myapp.tar myapp:tag四 自动化与工具化方案
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
五 恢复流程与演练要点
mysql < xxx.sql 或 pg_restore -d db xxx.dump)。tar -xzvf app_20250101.tar.gz -C /opt/myapprsync -avzh /backup/myapp/ /opt/myapp/JAVA_HOME 与启动脚本(如 systemd unit)。docker load -i myapp.targunzip -t/tar -tzf,对数据库做行数/校验和/抽样查询。