扩展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

posted on   荣锋亮  阅读(399)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示