linux中java应用定时备份需shell脚本+crontab实现:先mysqldump导出数据库(含--single-transaction等参数保证一致性),再tar打包配置目录,合并加密为tar.gz.gpg,自动清理7天前备份;密码通过~/.my.cnf管理,gpg密钥导入备份用户keyring,脚本权限设为700,每日2:30执行并记录日志,须验证解密与还原。

准备备份脚本(含 MySQL 导出与配置文件打包)
在 Linux 中,Java 应用本身不直接执行定时备份,需借助 Shell 脚本 + cron 实现。先创建一个备份脚本(例如 /opt/backup/backup.sh),内容如下:
- 使用 mysqldump 导出指定数据库(推荐加
--single-transaction --routines --triggers保证一致性) - 用 tar 打包 Java 应用的配置目录(如
/opt/myapp/conf/、/etc/myapp/等,避开敏感临时文件) - 将 SQL 文件与配置归档合并为单个加密压缩包(推荐
tar.gz+gpg或openssl加密) - 自动清理 7 天前的旧备份(避免磁盘占满)
示例脚本片段:
#!/bin/bash
BACKUP_DIR="/opt/backup"
DATE=$(date +%Y%m%d_%H%M)
DB_NAME="myapp_db"
DUMP_FILE="$BACKUP_DIR/${DB_NAME}_$DATE.sql"
CONF_DIR="/opt/myapp/conf"
ARCHIVE_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
GPG_KEY="backup@myorg.com"
<h1>导出数据库</h1><p>mysqldump -u backup_user -p'your_secure_pass' --single-transaction $DB_NAME > $DUMP_FILE</p><h1>打包配置并加入 SQL 文件</h1><p>tar -czf $ARCHIVE_FILE -C /tmp $DUMP_FILE $CONF_DIR</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6580" title="Linux installer"><img
src="https://img.php.cn/upload/skill/000/000/081/179101817874041.jpg" alt="Linux installer" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6580" title="Linux installer" class="overflowclass">Linux installer</a>
<p class="overflowclass">先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6580" title="Linux installer" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><h1>加密归档(需提前配置 GPG 密钥)</h1><p>gpg --encrypt --recipient "$GPG_KEY" $ARCHIVE_FILE</p><h1>清理原始未加密包和 7 天前的加密包</h1><p>rm $DUMP_FILE $ARCHIVE_FILE
find $BACKUP<em>DIR -name "backup</em>*.tar.gz.gpg" -mtime +7 -delete
</p>
配置安全访问权限与凭据管理
避免在脚本中硬编码数据库密码或密钥口令:
- MySQL 使用 ~/.my.cnf 配置文件存放认证信息(权限设为
600):[client]<br>user=backup_user<br>password=your_secure_pass
- GPG 私钥导入到备份用户(如
backup)的 keyring,确保脚本以该用户运行 - Java 配置文件若含密钥,备份前可先用 sed 或专用工具脱敏(如只保留结构,替换 password 字段为
[REDACTED]) - 脚本自身权限设为
700,归属专用备份用户(非 root,最小权限原则)
设置 cron 定时任务(每日凌晨 2:30 执行)
切换到备份用户(如 sudo -u backup bash),运行 crontab -e,添加:
30 2 * * * /opt/backup/backup.sh >> /opt/backup/backup.log 2>&1
- 日志重定向便于排查失败(如 mysqldump 权限拒绝、磁盘满、GPG 解锁失败)
- 建议配合 logrotate 管理备份日志,防止日志膨胀
- 首次手动运行脚本测试全流程(导出 → 打包 → 加密 → 清理),确认解密可用:
gpg --decrypt backup_20241201_0230.tar.gz.gpg | tar -tz
验证与灾备补充建议
自动化备份必须配套验证机制:
- 每次备份后,脚本可追加校验步骤:用
gzip -t检查压缩完整性,gpg --verify核对签名(若启用) - 每周抽样还原一次:解密 → 导入 MySQL(到测试库)→ 启动 Java 应用检查配置加载是否正常
- 异地冗余:通过
rsync或rclone将加密包同步至另一台服务器或对象存储(如 MinIO、S3 兼容接口) - Java 应用侧可增加启动时校验配置文件 MD5 的逻辑(仅用于防误覆盖,不替代备份)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










