温馨提示×

CentOS Tomcat如何备份数据

小樊
40
2025-12-07 18:06:31
栏目: 智能运维

CentOS 上备份 Tomcat 的可执行方案

一 备份范围与准备

  • 明确需要备份的内容:应用与发布包(webapps)、运行数据(work、temp)、配置(conf)、日志(logs)。如使用系统包安装的 Tomcat,常见目录为:/var/lib/tomcat、/etc/tomcat、/var/log/tomcat;如为手动安装,常见目录为:/opt/tomcat。先确认你的 CATALINA_HOME/CATALINA_BASE 路径。为降低一致性风险,建议在备份前短暂停机或使用支持热备的方式(见下文脚本的“尽量热备”思路)。准备备份存放目录(如 /opt/backup/tomcat),并确保磁盘空间充足。

二 手动备份与恢复步骤

  • 手动备份(示例路径,按你的实际路径调整)
    1. 停止服务(可选但更一致) sudo systemctl stop tomcat
    2. 备份数据与配置 sudo mkdir -p /opt/backup/tomcat sudo tar -czvf /opt/backup/tomcat/tomcat_backup_$(date +%Y%m%d%H%M%S).tar.gz
      /var/lib/tomcat/webapps /var/lib/tomcat/conf /var/lib/tomcat/work /var/lib/tomcat/temp
      /var/log/tomcat
    3. 启动服务 sudo systemctl start tomcat
    4. 验证 ls -lh /opt/backup/tomcat/*.tar.gz
  • 手动恢复(示例)
    1. 停止服务 sudo systemctl stop tomcat
    2. 解压覆盖(注意目标路径末尾斜杠,避免把目录嵌套) sudo tar -xzvf /opt/backup/tomcat/tomcat_backup_YYYYMMDDHHMMSS.tar.gz -C /
    3. 启动服务 sudo systemctl start tomcat
  • 说明
    • 若你的 Tomcat 安装在 /opt/tomcat,将上面命令中的 /var/lib/tomcat 替换为 /opt/tomcat 即可。
    • 日志通常较大,若只需配置与应用,可省略 logs 目录的备份。

三 自动化脚本与定时任务

  • 备份脚本示例(尽量热备,失败则回退停机备份;含数据库与异地同步)
    • 保存为:/opt/backup/scripts/tomcat_backup.sh
    • 赋权:chmod +x /opt/backup/scripts/tomcat_backup.sh
    • 按需修改:TOMCAT_HOME、BACKUP_DIR、RSYNC_TARGET、DB_*
#!/usr/bin/env bash
set -Eeuo pipefail

export LANG=en_US.UTF-8
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 配置区
TOMCAT_HOME="/opt/tomcat"
BACKUP_DIR="/opt/backup/tomcat"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
RETENTION_DAYS=7

DB_HOST="localhost"
DB_PORT="3306"
DB_USER="appuser"
DB_PASS="apppass"
DB_NAME="appdb"

RSYNC_TARGET="user@backup-server:/data/backups/tomcat/"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 0) 如能热备,先尝试用 catalina.sh stop 1 优雅停机(最多等30秒)
HOT_STOP=0
if [ -x "$TOMCAT_HOME/bin/catalina.sh" ]; then
  echo "[$(date)] 尝试优雅停机..."
  "$TOMCAT_HOME/bin/catalina.sh" stop 30 || true
  sleep 5
  if ! pgrep -x "java" -u tomcat >/dev/null 2>&1; then
    HOT_STOP=1
    echo "[$(date)] 优雅停机成功"
  else
    echo "[$(date)] 优雅停机失败,准备强制停机"
  fi
fi

# 1) 备份函数
do_backup() {
  local label="$1"; shift
  local out="$BACKUP_DIR/${label}_${TIMESTAMP}.tar.gz"
  tar -czf "$out" -C "$TOMCAT_HOME" "$@"
  echo "[$(date)] 已生成: $out ($(du -h "$out" | awk '{print $1}'))"
}

# 2) 执行备份(尽量热备;若未停机则跳过 work)
if [ "$HOT_STOP" -eq 1 ]; then
  do_backup "tomcat_full" "webapps" "conf" "logs" "work" "temp"
else
  echo "[$(date)] 未停机,跳过 work 目录以减少不一致风险"
  do_backup "tomcat_hot" "webapps" "conf" "logs" "temp"
fi

# 3) 备份数据库(如应用使用数据库)
if command -v mysqldump >/dev/null 2>&1; then
  DB_DUMP="$BACKUP_DIR/db_${DB_NAME}_${TIMESTAMP}.sql.gz"
  mysqldump -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" \
    | gzip > "$DB_DUMP"
  echo "[$(date)] 已生成: $DB_DUMP ($(du -h "$DB_DUMP" | awk '{print $1}'))"
fi

# 4) 清理旧备份
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +"$RETENTION_DAYS" -delete
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
echo "[$(date)] 旧备份清理完成(保留近 $RETENTION_DAYS 天)"

# 5) 如之前停机,则启动
if [ "$HOT_STOP" -eq 1 ]; then
  "$TOMCAT_HOME/bin/catalina.sh" start
  echo "[$(date)] Tomcat 已启动"
fi

# 6) 可选:异地同步(需配置免密 SSH)
if [ -n "${RSYNC_TARGET}" ]; then
  rsync -avz --partial --bwlimit=10240 "$BACKUP_DIR/" "$RSYNC_TARGET" && \
    echo "[$(date)] 已同步到 $RSYNC_TARGET" || \
    echo "[$(date)] 同步失败,请检查网络与 SSH 免密配置"
fi
  • 定时任务(每天 01:00 执行)
    • 执行:crontab -e
    • 添加:0 1 * * * /opt/backup/scripts/tomcat_backup.sh >> /var/log/tomcat_backup.log 2>&1
  • 说明
    • 该脚本优先尝试优雅停机;若失败则跳过 work 目录以减少不一致风险,同时保留 logs、temp 便于排障。
    • 如你的 Tomcat 使用系统服务名 tomcat,可在脚本中用 systemctl 启停替代 catalina.sh。

四 恢复与验证

  • 恢复步骤
    1. 停止服务 sudo systemctl stop tomcat
    2. 恢复归档(注意目标路径末尾斜杠) sudo tar -xzvf /opt/backup/tomcat/tomcat_full_YYYYMMDDHHMMSS.tar.gz -C /
    3. 如包含数据库备份,恢复数据库 gunzip < /opt/backup/tomcat/db_appdb_YYYYMMDDHHMMSS.sql.gz | mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" “$DB_NAME”
    4. 启动服务 sudo systemctl start tomcat
  • 验证要点
    • 检查进程与端口:ps -ef | grep tomcat;ss -lntp | grep 8080
    • 查看日志:tail -n 200 “$TOMCAT_HOME/logs/catalina.out” “$TOMCAT_HOME/logs/localhost*.log”
    • 抽查关键应用能否访问与登录
    • 定期做恢复演练,确保备份可用。

五 关键注意事项

  • 一致性优先:能停则停;不能停则尽量只备份 webapps/conf/logs,跳过 work(JSP 编译缓存),必要时接受一次重启以清理状态。
  • 目录路径差异:系统包安装常见为 /var/lib/tomcat、/etc/tomcat、/var/log/tomcat;手动安装常见为 /opt/tomcat,脚本与命令需与实际一致。
  • 数据库分离:Tomcat 配置与代码不包含业务数据,务必单独备份数据库(如 mysqldump),并在恢复时按序执行:先库后应用。
  • 异地与保留:结合 rsync 或对象存储做异地备份;设置保留策略(如保留 7 天),避免磁盘被占满。
  • 安全与合规:备份文件可能含配置与密钥,建议加密存储与传输,限制访问权限,并做好审计与演练。

0