扩展gobackup支持minio以及定时配置
huacnlee/gobackup 是一个很不错的多数据库的备份工具,但是对于minio支持不太好(path 路径格式),同时也
不支持定时任务备份,所以基于cron 包支持定时任务处理
修改的代码
- main.go
添加cron支持
{
Name: "start",
Flags: []cli.Flag{
cli.StringFlag{
Name: "start",
Usage: "cron execute backup task",
},
},
Action: func(c *cli.Context) error {
cronPerformAll()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigChan
logger.Info("shutting down %v signal received", sig)
return nil
},
},
func cronPerformAll() {
logger.Info(config.Scheduler)
mycron := cron.New()
if err := mycron.AddFunc(config.Scheduler, func() {
for _, modelConfig := range config.Models {
m := model.Model{
Config: modelConfig,
}
m.Perform()
}
}); err != nil {
logger.Error("start cron service error:", err.Error())
os.Exit(1)
}
mycron.Start()
}
- minio s3 path 支持
s3.go
cfg.S3ForcePathStyle = aws.Bool(true)
cfg.Region = aws.String(ctx.viper.GetString("region"))
cfg.MaxRetries = aws.Int(ctx.viper.GetInt("max_retries"))
Docker支持
基于多阶段构建同时内置依赖的工具
FROM golang:1.15-alpine AS build-env
WORKDIR /go/src/app
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn
COPY . .
RUN apk update && apk add git \
&& go build
FROM alpine:latest
RUN apk update && apk add ca-certificates mongodb-tools mysql-client redis postgresql-client && rm -rf /var/cache/apk/*
COPY --from=build-env /go/src/app/gobackup /usr/bin/gobackup
COPY gobackup.yml /etc/gobackup/gobackup.yml
ENTRYPOINT [ "gobackup" ]
参考使用
- docker-compose 文件
version: "3"
services:
monio:
image: minio/minio
command: server /export
environment:
- "MINIO_ACCESS_KEY=minio"
- "MINIO_SECRET_KEY=minio123"
ports:
- "9000:9000"
mysqldb:
image: mysql:5.6
restart: always
command: --character-set-server=utf8
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=dalong
- mysql sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for userdemo
-- ----------------------------
DROP TABLE IF EXISTS `userdemo`;
CREATE TABLE `userdemo` (
`username` varchar(255) DEFAULT NULL,
`userage` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of userdemo
-- ----------------------------
BEGIN;
INSERT INTO `userdemo` VALUES ('dalong', 11);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
- 配置
scheduler:
cron: "0 0/2 * * *"
models:
first:
compress_with:
type: tgz
store_with:
type: local
keep: 10
path: /Users/dalong/mylearning/db-back/gobackup/mydb
databases:
demo-db:
type: mysql
host: 127.0.0.1
port: 3306
database: demo
dumpPath:
username: root
password: dalong
second:
compress_with:
type: tgz
store_with:
type: s3
keep: 20
bucket: demo
endpoint: http://localhost:9000
path: backups
access_key_id: minio
secret_access_key: minio123
databases:
mydemodb:
type: mysql
host: 127.0.0.1
port: 3306
database: demo
username: root
password: dalong
- 构建&&启动
go build
./gobackup start
- 效果
说明
gobackup 的设计并不难,主要是集成了一些工具,我们可以通过简单的扩展就支持定时任务,基于此可以灵活的进行备份处理,完整代码
可以查看github
参考资料
https://github.com/huacnlee/gobackup
https://github.com/rongfengliang/gobackup
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2018-11-27 Replicated Ship 本地 kubernetes 环境试用
2018-11-27 replicatedhq-ship 基于Kustomize 项目的快速kubernetes 应用部署工具
2018-11-27 kustomize 模版自由的配置&&自定义kubernetes工具
2018-11-27 hasura graphql-engine v1.0.0-alpha30 remote schema stitch 试用
2017-11-27 cargo rust 包管理工具
2017-11-27 container-diff 谷歌开源镜像分析工具使用
2016-11-27 Disque