# 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 运行效果图 ![运行效果图](./demo.png) #### 使用组件 *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 ```