# mysql-backup
**Repository Path**: tym_hmm/mysql-backup
## Basic Information
- **Project Name**: mysql-backup
- **Description**: mysql备份工具(自动备份需程序配置)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-12-17
- **Last Updated**: 2024-01-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### mysql数据备份与恢复
> 文档及自定义内容不段完善中
#### 说明
程序可手动全量备分、指定备份及定时备份。使用定时备份时,因业务项目存在分表需通过手动方式进行配置。
案例demo`controller/BackUp.go` => `DayBackUp`方法
注意: 备份文件为sql文件,但因文件过大(单分片文件存储128M),在使用工具导入时会出现语法错误,需使用`mysql-mydumper`进行恢复
#### 执行逻辑
服务备份后会将mysql备份成 sql文件,当某个集合完整备份后自动打包成压缩文件并上传到oss
#### 任务开启
> 默认运行服务时不会执行任何任务,需通过web请求方式开启任务
> 通过使用浏览器打包指定url开启任务
> api说明[执行任务通过调用路由开启]
>
```
#主面板
http://xxxx:7071/
#开启定时备份任务
#http://xxxx:7071/dayBack
#每小时间隔定时备份
#http://xxxx:7071/hourBack
```
#### 解包[因解包存在权限问题,可使将后缀名修改后通过解压软件进行解包,预计下版本修复]
程序源文件 `unPack.go`
已打包好的工具 `tool/unpack/windows`
>使用说明
>通过windows 通过cmd执行 将还源打包文件
```cgo
unpack.exe -f=<文件> -d=<保存数据的文件>
```
|参数|说明|
|---|---|
|-f| 需解包的文件, 需要跟unpack.exe在同一个目录|
|-d| 保存数据的目录, 目录不存在会自动创建, 与需unpack.exe在同一目录 |
#### 数据恢复
>使用工具中的myloader进行恢复
>解包出来的文件也可通过 mysqlduper 进行恢复
```
$ myloader --help
Usage: myloader -h [HOST] -P [PORT] -u [USER] -p [PASSWORD] -d [DIR]
-P int
要连接的TCP/IP端口(默认为3306)
-d string
导入转储文件的目录
-h string
要连接的主机
-p string
用户密码
-t int
要使用的线程数(默认为16)
-u string
用户名
```
案例
```
Examples:
$myloader -h 192.168.0.2 -P 3306 -u mock -p mock -d sbtest.sql
2017/10/25 13:04:17.396002 loader.go:75: [INFO] restoring.database[sbtest]
2017/10/25 13:04:17.458076 loader.go:99: [INFO] restoring.schema[sbtest.benchyou0]
2017/10/25 13:04:17.516236 loader.go:99: [INFO] restoring.schema[sbtest.benchyou1]
2017/10/25 13:04:17.516389 loader.go:115: [INFO] restoring.tables[benchyou0].parts[00015].thread[1]
2017/10/25 13:04:17.516456 loader.go:115: [INFO] restoring.tables[benchyou0].parts[00005].thread[2]
```
#### 使用方式
1 配置说明
> 默认端口使用7071,如需修改可参见./conf/GlobalConf.go
```
DATA_DIR = "data" //数据保存目录,保存mgo临时备份及数据库文件
DATA_DB_NAME = "mysql"//数据库文件名称
SEVER_PORT = 7070//服务端口
//每天定时备份时间(24小时值, 今天备份昨天的)
DAY_BACK_HOUR = 3 //每天定时任务执行时间
INTER_VAL_BACK_HOUR = 2 //间隔小时执行 间隔后 下个整点小时执行
//打包配置
//打包文件后缀
PACK_FILE_SUBFIX = "ar"
//阿里云oss配置
OSS_ALIYUN_ENPOINT = "xxxx"
OSS_ALIYUN_ACCESS_KEY_ID = "xxx"
OSS_ALIYUN_ACCESS_KEY_SECRET = "xxx"
//oss桶
OSS_BUCKET = "fn-backup"
//oss桶目录
OSS_BUCKET_BACK_UP_DIR = "dataCenter"
//分片上传大小配置(M)
CHUNK_SIZE int64 = 1024
```
### 任务执行添加
> 任务添加接口见 module/mysqlback/api/MysqlDbInterface.go
> 使用方式
```
### 每天定时备份(今天执行昨天的)
err := api.NewMysqlDbApi().DayBack(conf.DAY_BACK_HOUR, backup.SdkBackUpTable)
```
```
Connection(host string, port int, user string, pwd string, dataBase string) error
/**
获取数据库集合列表
*/
GetTables() ([]string, error)
/**
数据备份(全量)
*/
FullBack() *taskMysqlBack.TaskMysqlError
/**
指定集合备份
@param tableName 表名
*/
SpecifiedBack(tableName string) *taskMysqlBack.TaskMysqlError
/**
定时备份
@param dayBackHour int 每天定时定点执行(24小时)
@param timingMgoBackNodeDatas []*taskMysqlBack.TimingBackNodeData 备份表数据
*/
DayBack(dayBackHour int,timingMgoBackNodeDatas []*taskMysqlBack.TimingBackNodeData) *taskMysqlBack.TaskMysqlError
/**
定时间隔小时备份
@param intervalHour int 执行间隔小时
@param timingMgoBackNodeDatas []*taskMysqlBack.TimingBackNodeData 备份表数据
*/
HourBack(intervalHour int, timingMgoBackNodeDatas []*taskMysqlBack.TimingBackNodeData) *taskMysqlBack.TaskMysqlError
/**
获取数据状态
*/
GetStatus() []*taskMysqlBack.JobMsoProcessNode
```
2 开启服务,本地调式
```cgo
go run main.go
```
3 运行效果图

#### 使用组件
*mysql-mydumper:*
> mysql 备份组件
> [文档 https://gitee.com/tym_hmm/mysql-mydumper](https://gitee.com/tym_hmm/mysql-mydumper)
>
```
go get -u gitee.com/tym_hmm/mysql-mydumper
```
*日志组件*
>日志输出组件
> [文档 https://gitee.com/tym_hmm/hlog](https://gitee.com/tym_hmm/hlog)
```
go get -u gitee.com/tym_hmm/hlog
```
*timer-task*
>定时任务组件,满足每天某一时刻执行及循环执行,采用回调方式监听任务
```
go get -u gitee.com/tym_hmm/timer-task
```
*db_store*
> 基于boltdb 入口封装,不段完善且立志于封装好用的gorm
```cgo
go get -u gitee.com/tym_hmm/db_store
```
*阿里云OSS上传组件*
>对阿里云oss二次封装,只需几行代码即可上传到oss,可做分片上传及单文件上传
```cgo
go get -u gitee.com/tym_hmm/oss-aliyun-client
```