增量备份功能允许您在全量备份的基础上,只备份发生变化的文件和数据,从而显著减少备份时间和存储空间占用。
- ✅ 智能增量策略: 支持基于时间、大小和数据库日志的增量备份
- ✅ 自动全量备份: 根据配置的条件自动触发全量备份
- ✅ 备份链管理: 自动维护完整的备份链关系
- ✅ 增量恢复: 支持从增量备份链恢复到指定时间点
- ✅ Web界面管理: 直观的Web界面查看和管理增量备份
- ✅ 多数据库支持: 支持MySQL、PostgreSQL的增量备份
- ✅ 文件去重: 可选的文件去重功能减少存储占用
- ✅ 自动清理: 基于保留策略自动清理过期备份
| 策略类型 | 适用场景 | 原理 |
|---|---|---|
time |
文件备份、通用数据库 | 基于文件修改时间检测变化 |
size |
大文件场景 | 基于文件大小变化检测 |
binlog |
MySQL数据库 | 基于MySQL binlog进行增量备份 |
- Go 1.19 或更高版本
- 支持的操作系统: Linux, macOS, Windows
- 数据库客户端工具(如需要数据库增量备份)
# 克隆代码库
git clone https://github.com/your-repo/gobackup.git
cd gobackup
# 编译
make build
# 或者直接使用 go build
go build -o gobackup main.go
# 安装到系统路径
sudo cp gobackup /usr/local/bin/GoBackup 会按以下顺序查找配置文件:
./gobackup.yml(当前目录)~/.gobackup/gobackup.yml(用户主目录)/etc/gobackup/gobackup.yml(系统目录)
在您的 gobackup.yml 配置文件中,为每个模型添加 incremental 配置节:
models:
my_backup:
description: "我的增量备份"
# 增量备份配置
incremental:
enabled: true # 启用增量备份
strategy: "time" # 增量策略
base_backup_days: 7 # 全量备份间隔天数
max_incrementals: 6 # 最大增量备份数
retention_days: 30 # 备份保留天数
compression_level: 6 # 压缩级别 (1-9)
enable_deduplication: true # 启用去重
# 其他配置...
archive:
includes:
- /path/to/backup/
storages:
local:
type: local
path: /backup/destination/| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled |
boolean | false | 是否启用增量备份 |
strategy |
string | "time" | 增量策略:time/size/binlog |
base_backup_days |
int | 7 | 多少天执行一次全量备份 |
max_incrementals |
int | 6 | 最多几个增量备份后强制全量 |
retention_days |
int | 30 | 备份记录保留天数 |
compression_level |
int | 6 | 增量备份压缩级别 |
enable_deduplication |
boolean | false | 是否启用文件去重 |
models:
mysql_incremental:
incremental:
enabled: true
strategy: "binlog"
base_backup_days: 7
max_incrementals: 6
databases:
mysql_main:
type: mysql
host: localhost
database: production
username: backup_user
password: your_passwordmodels:
postgres_incremental:
incremental:
enabled: true
strategy: "time"
base_backup_days: 14
databases:
postgres_main:
type: postgresql
host: localhost
database: production
username: postgres
password: your_password# 启动守护进程(推荐)
gobackup start
# 或者在前台运行
gobackup run# 执行所有模型的备份
gobackup perform
# 执行特定模型的备份
gobackup perform -m my_backup_model
# 强制执行全量备份(忽略增量策略)
gobackup perform -m my_backup_model --force-full# 通过Web界面查看(推荐)
# 访问 http://localhost:2703
# 或者通过API查看
curl http://localhost:2703/api/incremental/status/my_backup_model通过Web界面或API进行增量恢复:
# 恢复到指定时间点
curl -X POST http://localhost:2703/api/incremental/restore \
-H "Content-Type: application/json" \
-d '{
"model": "my_backup_model",
"target_time": "2023-12-01T10:30:00Z",
"restore_path": "/path/to/restore/"
}'- 启动GoBackup服务:
gobackup start - 打开浏览器访问:
http://localhost:2703 - 使用配置文件中设置的用户名和密码登录
- 增量状态: 显示增量备份是否启用
- 配置信息: 显示增量备份策略和参数
- 统计信息: 显示增量备份数量、最后全量备份时间等
- 下次备份类型: 显示下次备份是全量还是增量
- 备份列表: 查看所有备份记录(全量和增量)
- 备份链: 显示备份之间的依赖关系
- 大小统计: 显示每个备份的大小和累计大小
- 状态监控: 显示备份成功/失败状态
- 时间点恢复: 选择目标时间点进行恢复
- 恢复路径: 指定恢复文件的目标路径
- 恢复进度: 实时显示恢复进度
- 手动清理: 手动触发备份清理
- 清理预览: 查看哪些备份将被清理
- 清理日志: 查看清理操作的历史记录
GET /api/incremental/status/:model响应示例:
{
"incremental_enabled": true,
"incremental_config": {
"enabled": true,
"strategy": "time",
"base_backup_days": 7,
"max_incrementals": 6,
"retention_days": 30
},
"last_full_backup": {
"id": "backup_123",
"timestamp": "2023-12-01T02:00:00Z",
"size": 1048576
},
"incremental_count": 3,
"should_do_full": false
}GET /api/incremental/records/:model?type=incremental&limit=10GET /api/incremental/chain/:model?target_time=2023-12-01T10:30:00ZPOST /api/incremental/restore
Content-Type: application/json
{
"model": "my_backup_model",
"target_time": "2023-12-01T10:30:00Z",
"restore_path": "/path/to/restore/"
}POST /api/incremental/cleanup/:model检查事项:
- 确认
incremental.enabled设置为true - 检查是否满足增量备份条件(存在全量备份)
- 查看日志确认是否有错误信息
# 查看日志
tail -f ~/.gobackup/gobackup.log
# 检查配置
gobackup perform -m your_model --dry-runMySQL binlog问题:
# 检查binlog是否启用
mysql -e "SHOW VARIABLES LIKE 'log_bin';"
# 检查binlog文件
mysql -e "SHOW BINARY LOGS;"PostgreSQL WAL问题:
# 检查WAL设置
psql -c "SHOW wal_level;"
psql -c "SHOW archive_mode;"- 检查备份文件是否完整
- 确认恢复路径权限
- 验证备份链的完整性
- 调整保留策略:减少
retention_days - 启用去重:
enable_deduplication: true - 增加压缩级别:
compression_level: 9
# 查看增量备份相关日志
grep "Incremental" ~/.gobackup/gobackup.log
# 查看备份状态变化
grep "BackupState" ~/.gobackup/gobackup.log
# 查看错误信息
grep "ERROR\|Failed" ~/.gobackup/gobackup.log- 文件备份: 推荐使用
time策略 - MySQL: 推荐使用
binlog策略 - PostgreSQL: 推荐使用
time策略 - 大文件场景: 可考虑
size策略
# 推荐配置 - 平衡性能和存储
incremental:
base_backup_days: 7 # 一周一次全量
max_incrementals: 6 # 最多6个增量
retention_days: 30 # 保留一个月
compression_level: 6 # 中等压缩
enable_deduplication: true# 配置邮件通知
notifiers:
email:
type: mail
host: smtp.gmail.com
username: backup@company.com
password: $EMAIL_PASSWORD
to: admin@company.com
on_success: true
on_failure: true- 使用加密存储备份文件
- 定期测试恢复流程
- 将备份存储在不同的物理位置
- 使用强密码保护Web界面
# 加密配置示例
encrypt_with:
type: openssl
password: "your-strong-encryption-password"
# Web安全配置
web:
username: admin
password: "your-strong-web-password"- 在系统低负载时段执行备份
- 使用SSD存储临时文件
- 调整压缩级别平衡性能和存储
- 启用去重减少存储占用
# 性能优化配置
schedule:
cron: "0 2 * * *" # 凌晨2点执行
incremental:
compression_level: 4 # 较低压缩,更快速度
enable_deduplication: true欢迎提交问题报告和功能请求到 GitHub Issues。
注意: 增量备份功能目前为实验性功能,建议在生产环境使用前进行充分测试。