Skip to content

A distributed, scheduled database backup system with support for saving to object storage and using pinned notifications for backup status

Notifications You must be signed in to change notification settings

overfans/gin-mysqlbak

 
 

Repository files navigation

Table of Contents generated with DocToc

gin-mysqlbak

gin-mysqlbak:一款简单高效、支持多集群统一备份的Mysql数据库备份平台!

  1. 请求链路日志打印,涵盖mysql/redis/request,集群版本支持jaeger链路追踪
  2. 支持备份文件直接下载到本地,可一键还原至原数据库。
  3. 支持对接S3协议对象存储存储备份文件,现已支持minio、阿里oss
  4. 支持主机健康检查,主机离线通过钉钉发送告警
  5. 支持钉钉推送备份状态,成功失败早知道
  6. 通过部署agent完成异地多节点备份,备份任务统一管理,备份数据集中存储

项目地址:https://github.com/noovertime7/gin-mysqlbak

前端地址: https://github.com/noovertime7/gin-mysql-web

agent地址: https://github.com/noovertime7/gin-mysqlbak-agent

一、现在开始

注意: 安装开始前,请先创建gin-mysqlbak数据库,刷入sql文件初始化数据库,sql文件在项目sql文件夹下

1.1、二进制编译运行

  • 开始前请确保机器已安装go编译环境

  • 安装软件依赖 go mod使用请查阅:

https://blog.csdn.net/e421083458/article/details/89762113

git clone https://github.com/noovertime7/gin-mysqlbak.git
cd gin-mysqlbak
go mod tidy
  • 确保正确配置了 conf/mysql_map.toml、conf/config.ini

  • 运行入口main.go (默认监听8880端口)

go run main.go

1.2 Docker部署

1.2.1 后端服务部署

首先请在root目录下准备好三个配置文件,base.toml不用改 ,配置文件实例在项目conf文件夹下

docker run -itd --name gin-mysql-server \
-p 8880:8880 \
-v /root/config.ini:/app/conf/config.ini \
-v /root/base.toml:/app/conf/dev/base.toml \ 
-v /root/mysql_map.toml:/app/conf/dev/mysql_map.toml \
harbor-tj.ts-it.cn:63333/mysqlbak/gin-mysqlbak-server:2.0.3-SP3

1.2.2 前端服务部署

首先请在root目录下准备好前端配置文件

docker run -itd --name gin-mysql-web -p 8881:80 -v /root/default.conf:/etc/nginx/conf.d/default.conf  harbor-tj.ts-it.cn:63333/mysqlbak/gin-mysqlbak-web:2.0.2-SP3

1.2.3 agent部署

首先请在root目录下准备好agent配置文件,agent配置文件在agent仓库下的/domain/config/config.ini

docker run -itd --name gin-mysql-agent -v /root/config.ini:/app/domain/config/config.ini harbor-tj.ts-it.cn:63333/mysqlbak/gin-mysqlbak-agent:2.0.2-SP5

1.3 Kubernetes环境部署

  • 开始前请准备状态良好的k8s集群,请根据实际环境修改conf文件夹下的配置文件
  • 创建mysqlbak命名空间部署后端服务
kubectl create ns mysqlbak  ## 创建命名空间
cd gin-mysqlbak/kubernetes && kubectl apply -f ./conf  ## 创建configmap配置文件
kubectl apply -f gin-mysqlbak-server-deploy.yaml  ## 创建后端服务
kubectl apply -f gin-mysqlbak-server-web.yaml  ## 创建前端服务

二、架构

2.1、单机版本

实现原理:

单机版本比较简单,使用server端备份能力进行备份,使用cron表达式创建备份任务,两种备份方式,xorm备份失败后,使用mysqldump进行备份,确保备份任务能百分百成功

aloneserver.jpg

2.2、集群版本

实现原理:

原先的server端作为微服务网关,各个agent通过服务端接口进行服务的注册发现,上报agent信息,server端通过不通的服务名调用agent,agent完成数据备份与存储

cluster.jpg

三、操作及页面演示

3.1、单机版本操作演示

  • 首页大盘展示

dashboard.gif

  • 备份主机操作演示

hostlist.gif

  • 备份主机添加备份任务操作演示

hosttask.gif

  • 任务列表操作展示

task.gif

  • 备份历史记录操作展示

bakhistory.gif

3.2、集群版本备份功能演示

  • 集群列表

cluster_servicelist.gif

  • 集群主机列表

cluster_host.gif

  • 集群任务列表

cluster_tasklist.gif

  • 集群历史记录列表

cluster_history.gif

四、其他

log / redis / mysql / http.client 常用方法

参考文档:https://github.com/e421083458/golang_common

About

A distributed, scheduled database backup system with support for saving to object storage and using pinned notifications for backup status

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 99.8%
  • Dockerfile 0.2%