# AutoBackupDatabase **Repository Path**: stsite/auto-backup-database ## Basic Information - **Project Name**: AutoBackupDatabase - **Description**: 一个基于 Spring Boot 3 的数据库自动备份项目,主要针对 MySQL 数据库实现自动备份、定时调度、压缩备份文件、上传到存储(目前支持百度云盘)、日志和通知等功能。项目采用模块化设计,便于扩展和定制,可适用于各种规模的企业级应用场景。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-12 - **Last Updated**: 2026-02-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据库自动备份项目 ## 项目简介 一个基于 Spring Boot 3 的数据库自动备份项目,主要针对 MySQL 数据库实现自动备份、定时调度、压缩备份文件、上传到存储(目前支持百度云盘)、日志和通知等功能。项目采用模块化设计,便于扩展和定制,可适用于各种规模的企业级应用场景。 ## 核心功能 - **MySQL 备份**:支持多个数据库的自动备份,使用 mysqldump 命令执行备份 - **定时调度**:基于 Quartz 的定时任务调度,支持灵活的 cron 表达式配置 - **压缩备份文件**:支持将备份文件压缩为 zip 格式,减少存储空间 - **上传到存储**:支持上传到百度云盘,实现异地备份 - **日志 & 通知**:支持邮件通知备份结果,包含详细的执行状态 - **配置管理**:集中的配置管理和验证,支持多环境配置 - **模块化设计**:采用模块化设计,便于扩展和维护 - **备份文件管理**:自动清理过期备份文件,避免存储空间浪费 ## 技术栈 - Spring Boot 3.2.0 - Quartz(定时调度) - MySQL Connector Java 8.0.33 - Apache Commons Compress(压缩) - Baidu Cloud SDK(百度云盘上传) - Spring Mail(邮件通知) - Maven(项目管理) ## 项目架构 ### 架构图 ``` ┌─────────────────┐ │ auto-backup-admin │ # 管理模块(主应用,包含管理功能) └─────────┬───────┘ │ ┌─────────┼─────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ auto-backup-core │ │ auto-backup-job │ │ auto-backup-test │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ### 模块说明 | 模块名称 | 主要职责 | 核心类 | 文件位置 | |---------|---------|--------|----------| | **auto-backup-core** | 核心业务逻辑,包含配置类和服务类 | MySQLBackupService, BaiduCloudService, CompressService, NotificationService | auto-backup-core/src/main/java/com/selftaught/core/ | | **auto-backup-job** | 定时任务管理,负责调度备份任务 | BackupJob, QuartzConfig | auto-backup-job/src/main/java/com/selftaught/job/ | | **auto-backup-admin** | 管理模块,包含应用入口、配置文件和管理功能 | AutoBackupDatabaseApplication | auto-backup-admin/src/main/java/com/selftaught/admin/ | | **auto-backup-test** | 测试模块,包含单元测试和集成测试 | ConfigServiceTest, MySQLBackupServiceTest | auto-backup-test/src/test/java/com/selftaught/test/ | ### 模块依赖关系 ``` auto-backup-admin ├── auto-backup-core # 依赖核心模块 └── auto-backup-job # 依赖定时任务模块 auto-backup-job └── auto-backup-core # 依赖核心模块 auto-backup-test ├── auto-backup-core # 依赖核心模块 └── auto-backup-admin # 依赖管理模块 ``` ## 快速开始 ### 1. 环境准备 - JDK 17+ - Maven 3.6+ - MySQL 5.7+ - 百度云盘开放平台应用(可选,用于上传备份文件) - SMTP 服务器配置(可选,用于邮件通知) ### 2. 配置修改 编辑 `auto-backup-admin/src/main/resources/application.yml` 文件,根据实际环境进行配置: ### 3. 构建项目 ```bash # 在项目根目录执行 mvn clean package ``` ### 4. 运行项目 ```bash # 在auto-backup-admin目录执行 java -jar target/auto-backup-admin-1.0.0.jar ``` ### 5. 验证备份 - 查看备份目录中的备份文件 - 查看百度云盘中的上传文件(如果启用了百度云盘上传) - 查看邮件通知(如果启用了邮件通知) - 查看日志文件 `./logs/auto-backup.log` ## 配置说明 ### 完整配置文件模板 ```yaml # 应用配置 app: backup: # MySQL 配置 mysql: host: localhost # MySQL 主机 port: 3306 # MySQL 端口 username: root # MySQL 用户名 password: password # MySQL 密码 databases: test,demo # 要备份的数据库,多个数据库用逗号分隔 backup-dir: ./backup # 备份目录 retention-days: 7 # 备份文件保留天数 # 压缩配置 compress: enabled: true # 是否启用压缩 format: zip # 压缩格式 # 定时配置 schedule: cron: 0 0 2 * * ? # 定时执行表达式,每天凌晨 2 点执行 # 存储配置 storage: baidu: enabled: true # 是否启用百度云盘上传 app-key: your-app-key # 百度云盘 App Key app-secret: your-app-secret # 百度云盘 App Secret access-token: your-access-token # 百度云盘访问令牌 refresh-token: your-refresh-token # 百度云盘刷新令牌 backup-folder: /backup # 百度云盘备份目录 # 通知配置 notification: enabled: false # 是否启用通知 type: email # 通知类型 email: host: smtp.example.com # 邮件服务器 port: 587 # 邮件服务器端口 username: your-email # 邮件用户名 password: your-password # 邮件密码 to: recipient@example.com # 收件人邮箱 # 日志配置 logging: level: com.selftaught: info # 日志级别 file: name: ./logs/auto-backup.log # 日志文件路径 max-size: 10MB # 日志文件最大大小 max-history: 30 # 日志文件保留天数 ``` ### 配置项说明 | 配置项 | 说明 | 默认值 | 必填 | |-------|-----------------|--------|------| | app.backup.mysql.host | MySQL 主机地址 | localhost | 是 | | app.backup.mysql.port | MySQL 端口 | 3306 | 是 | | app.backup.mysql.username | MySQL 用户名 | root | 是 | | app.backup.mysql.password | MySQL 密码 | password | 是 | | app.backup.mysql.databases | 要备份的数据库,多个用逗号分隔 | - | 是 | | app.backup.mysql.backup-dir | 备份目录 | ./backup | 是 | | app.backup.mysql.retention-days | 备份文件保留天数 | 7 | 是 | | app.backup.compress.enabled | 是否启用压缩 | true | 否 | | app.backup.compress.format | 压缩格式 | zip | 否 | | app.backup.schedule.cron | 定时执行表达式 | 0 0 2 * * ? | 否 | | app.storage.baidu.enabled | 是否启用百度云盘上传 | false | 否 | | app.storage.baidu.app-key | 百度云盘 App Key | - | 否(启用时必填) | | app.storage.baidu.app-secret | 百度云盘 App Secret | - | 否(启用时必填) | | app.storage.baidu.access-token | 百度云盘访问令牌 | - | 否(启用时必填) | | app.storage.baidu.refresh-token | 百度云盘刷新令牌 | - | 否(启用时必填) | | app.storage.baidu.backup-folder | 百度云盘备份目录 | /backup | 否 | | app.notification.enabled | 是否启用通知 | false | 否 | | app.notification.type | 通知类型 | email | 否 | | app.notification.email.host | 邮件服务器 | - | 否(启用时必填) | | app.notification.email.port | 邮件服务器端口 | 587 | 否 | | app.notification.email.username | 邮件用户名 | - | 否(启用时必填) | | app.notification.email.password | 邮件密码 | - | 否(启用时必填) | | app.notification.email.to | 收件人邮箱 | - | 否(启用时必填) | ## 部署说明 ### 开发环境部署 1. 克隆项目到本地 2. 修改 `application.yml` 配置文件 3. 执行 `mvn clean package` 构建项目 4. 执行 `java -jar target/auto-backup-admin-1.0.0.jar` 运行项目 ### 生产环境部署 1. 克隆项目到服务器 2. 修改 `application.yml` 配置文件,建议使用环境变量或配置中心管理敏感信息 3. 执行 `mvn clean package -P production` 构建生产环境包 4. 使用 systemd 或其他服务管理工具配置为系统服务 5. 设置开机自启 ### 服务配置示例(systemd) ```ini [Unit] Description=Auto Backup Database Service After=network.target [Service] Type=simple User=backup WorkingDirectory=/opt/auto-backup ExecStart=/usr/bin/java -jar auto-backup-admin-1.0.0.jar Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target ``` ## 监控和维护 ### 日志监控 - 应用日志:`./logs/auto-backup.log` - 系统日志:通过 systemd 查看 `journalctl -u auto-backup.service` ### 定期维护 1. **备份验证**:定期验证备份文件的完整性,确保备份能够正常恢复 2. **存储空间检查**:定期检查备份目录和云盘空间,确保有足够的存储空间 3. **配置更新**:根据业务需求,及时更新备份策略和配置 4. **安全审计**:定期检查备份文件的访问权限,确保数据安全 ### 常见问题排查 | 问题 | 可能原因 | 解决方案 | |------|--------------|----------------------------------| | 备份失败 | MySQL 连接信息错误 | 检查 MySQL 连接配置,确保用户名密码正确 | | 备份失败 | MySQL 服务未运行 | 启动 MySQL 服务,确保服务正常运行 | | 压缩失败 | 备份目录权限不足 | 确保应用有备份目录的写入权限 | | 上传失败 | 百度云盘配置错误 | 检查百度云盘配置,确保 App Key、Secret 和令牌正确 | | 上传失败 | 网络连接不稳定 | 检查网络连接,确保能够访问百度云盘 API | | 通知失败 | 邮件配置错误 | 检查邮件配置,确保SMTP服务器和凭证正确 | | 通知失败 | 邮件服务器限制 | 检查邮件服务器是否限制了发送频率或数量 | ## 扩展指南 ### 添加新的存储服务 如果需要添加新的存储服务(如阿里云 OSS、腾讯云 COS 等),可以按照以下步骤: 1. 在 `auto-backup-core` 模块中创建对应的配置类(如 `AliyunOssConfig.java`) 2. 创建对应的服务类(如 `AliyunOssService.java`) 3. 在 `MySQLBackupService` 中集成新的存储服务 4. 更新配置文件模板,添加新的存储服务配置项 ### 添加新的通知方式 如果需要添加新的通知方式(如短信、微信等),可以按照以下步骤: 1. 在 `NotificationConfig` 中添加对应的配置 2. 在 `NotificationService` 中添加对应的通知方法 3. 更新配置文件模板,添加新的通知方式配置项 ### 添加新的数据库类型支持 如果需要添加新的数据库类型支持(如 PostgreSQL、Oracle 等),可以按照以下步骤: 1. 在 `auto-backup-core` 模块中创建对应的配置类 2. 创建对应的备份服务类 3. 在 `auto-backup-job` 模块中更新定时任务,支持新的数据库类型 4. 更新配置文件模板,添加新的数据库类型配置项 ## 贡献指南 欢迎贡献代码和提出问题! ### 代码贡献流程 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ### 代码规范 - 遵循 Spring Boot 代码规范 - 每个 Java 文件添加详细的注释 - 方法注释使用 Javadoc 格式 - 变量和方法命名清晰明了 - 避免使用魔法数字和硬编码字符串 ### 提交信息规范 - 使用英文提交信息 - 提交信息应简洁明了,描述具体更改内容 - 遵循 Angular 提交信息规范 ## 版本历史 | 版本 | 发布日期 | 主要变更 | |------|------------|-----------------------------------------| | 1.0.0 | 2026-02-12 | 初始版本,支持 MySQL 备份、定时调度、压缩、百度云盘上传、邮件通知等功能 | ## 许可证 本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。 ## 联系方式 - 项目地址:https://gitee.com/whaoch/AutoBackupDatabase - 问题反馈:请在项目仓库中提交 Issue ## 致谢 - Spring Boot 团队 - Quartz 团队 - Apache Commons 团队 - Baidu Cloud SDK 团队 感谢所有为开源事业做出贡献的开发者!