一个使用Go语言开发的灵活备份系统,支持数据库备份和文件备份,并提供Web界面进行管理。
A flexible backup system developed with Go language, supporting database and file backups with a web-based management interface.
- 🗄️ 支持MySQL数据库备份
- 📁 支持文件和目录备份
- 💾 支持本地存储和S3协议存储
- 🔌 可扩展的存储和备份类型
- ⏱️ 基于Cron的任务调度
- 🌐 美观的Web管理界面
- 📊 备份历史记录和下载功能
- 🧹 自动清理过期备份
- Go 1.21+
- MySQL 5.7+ 或 SQLite
- mysqldump命令行工具 (用于数据库备份)
git clone https://github.com/yourusername/backup-go.git
cd backup-go创建或编辑config.yaml文件:
# 服务器配置
server:
port: 8080
# 数据库配置
database:
type: sqlite # mysql或sqlite
# 如果需要使用MySQL,请配置以下内容
# host: 127.0.0.1
# username: root
# password: your-password
# port: 3306
# name: backup_go注意: 如果您需要使用S3协议存储,可以在Web界面中进行配置。
# 下载依赖
go mod tidy
# 构建
go build -o backup-go
# 运行
./backup-go在浏览器中访问 http://localhost:8080
我们提供了预构建的多架构 Docker 镜像,支持 amd64、arm64 等平台:
# 拉取最新版本
docker pull zzzgr/backup-go:1.0.0-amd64
# 运行容器
docker run -d --name backup-go -p 8080:8080 \
-v $(pwd):/app \
zzzgr/backup-go:1.0.0-amd64/app/config.yaml: 配置文件
backup-go/
├── api/ # API层,包含路由和控制器
│ ├── controller/ # 控制器
│ ├── middleware/ # 中间件
│ └── router/ # 路由配置
├── config/ # 配置相关
├── entity/ # 数据实体模型
├── model/ # 数据访问层
├── public/ # 静态资源
├── repository/ # 数据仓库
├── service/ # 业务逻辑层
│ ├── backup/ # 备份服务实现
│ ├── cleanup/ # 清理服务
│ ├── config/ # 配置服务
│ ├── scheduler/ # 调度服务
│ └── storage/ # 存储服务实现
├── test/ # 测试代码
├── config.yaml # 配置文件
└── main.go # 程序入口
- 在Web界面点击"新建任务"
- 选择"数据库备份"类型
- 填写数据库连接信息
- 配置调度计划(Cron表达式)
- 选择存储方式
- 保存任务
- 在Web界面点击"新建任务"
- 选择"文件备份"类型
- 填写要备份的文件/目录路径(每行一个)
- 配置调度计划(Cron表达式)
- 选择存储方式
- 保存任务
在任务列表中点击对应任务的"执行"按钮即可手动触发备份任务。
在导航栏切换到"备份记录"页面,可以查看所有备份记录,对于成功的备份可以点击"下载"按钮下载备份文件。
本系统采用模块化设计,易于扩展:
- 存储服务接口: 支持本地存储和S3协议存储,可以扩展更多存储方式
- 备份服务接口: 支持数据库备份和文件备份,可以扩展更多备份类型
- Cron调度器: 基于robfig/cron库实现任务调度
- Web API: 提供RESTful API接口
- 前端界面: 基于Bootstrap实现的现代化Web界面
- 支持SQLite: 除MySQL外,现在还支持SQLite作为系统数据库
- 备份统计: 添加了备份统计页面,展示备份趋势和使用情况
- 多语言支持: 界面支持中文和英文
- S3兼容存储: 支持Amazon S3, MinIO, 阿里云OSS等S3兼容存储
- 备份数据加密: 支持对备份数据进行加密存储
我们欢迎各种形式的贡献,包括但不限于:
- 提交 Issue 报告bug或提出新功能建议
- 提交 Pull Request 改进代码
- 改进文档
- 分享使用经验
贡献前请查看我们的贡献指南。
本项目采用 MIT 许可证 进行许可。



