Courier 是一个简单的mysql/mongo数据库导入导出和更改工具;本工具支持以下功能:
- 对所有含有uid字段的数据进行导入导出,修改uid操作;
- 对特定数据库的特定表支持根据某一字段查询导出导入;
- 对某一库的某些表支持全表导出。
部署位置
xs5
port:8383
cs13
port:8383
配置:conf/config.yaml
mysqlexport:
srv1: #导出环境的数据库server
host: 127.0.0.1 #导出数据库的host
port: 3306 #导出数据库的port
username: root #导出数据库的用户名
password: #导出数据库的密码
key: #根据特定字段导出,一个标志,具体字段见下
column1: #字段1
db1: #包含column1的数据库1
- table1 #包含colmn1的表1
- table2
column2: #字段2
db1: #包含column2的数据库1
- table1 #包含colmn2的表1
- table2
all: #key为all时,表示全表数据导出
- db1 #表所在的数据库列表
- db2
使用:
本地编译
go mod tidy -compat="1.17"
go run main.go handler.go
docker编译
cd docker && ./run_docker.sh
导出uid字段数据
需要qssh到xs5上面执行:curl命令详见xs5:/home/qboxserver/courier/_package/script/curl_export.sh
http://localhost:8383/api/data/by/uid
POST
{
"uid":[uid1,uid2...]
}
导出非uid字段数据
非uid字段以及对应要导出的库和表要提前写好在config.yaml中
http://localhost:8383/api/data/by/key
POST
{
"key":column_name,
"value":column_value
}
导出成功后默认生成:tar_data/data_xx.tar.gz,且自动上传到了bucket
全表数据导出
http://localhost:8383/api/data/import/database
POST
{
"database_type":1, # 1表示mysql;2表示mongo
"database": "trade", #要导入表所在库
"tables":["price_items", "price_tables"]#导出整表返回的文件信息
}
导入数据(uid),返回结果为脱敏后的uid
导入,脱敏,删除操作需要qssh到cs13上面执行:curl命令详见cs13:/home/qboxserver/courier/_package/script/
http://localhost:8383/api/data/import
POST
{
"file":"data_xxx.tar.gz" #这儿的文件名是执行导出接口返回的文件信息
"uid":[uid1]
}
导入数据(非uid)
http://localhost:8383/api/data/import
POST
{
"file":"data_xxx.tar.gz" #这儿的文件名是执行导出接口返回的文件信息
}
对含有某些uid字段的数据进行删除
http://localhost:8383/api/data/delete
POST
{
"uid":[uid1,uid2] #选择对哪些uid进行脱敏
}
全表数据导入
http://localhost:8383/api/data/import/database
POST
{
"database_type":1, # 1表示mysql;2表示mongo
"database": "trade", #要导入表所在库
"file":"data_table_202206141104.tar.gz" #导出整表返回的文件信息
}
通过命令调用,可以通过Courier -h查看使用方式
参数说明
-m,methodb调用的接口:
"1"/"export_by_uid";
"2"/"export_by_key";
"3"/"export_table";
"4"/"import";
"5"/"import_database";
"6"/"delete";
-u uid(通过uid导出和删除数据)
-key key(通过key-value导出数据)
-value value(通过key-value导出数据)"
-type dbtype(通过指定库和表名来对指定数据库种类全表导出)
-db dbname(通过指定库和表名来对指定数据库种类全表导出)
-table tablename(通过指定库和表名来对指定数据库种类全表导出)
-path path(通过路径来导入数据库)
eg:
Courier -m 1 -u 2222 -u 2223 //通过uid 为2222和2223导出数据库
Courier -m 2 -k order_hash -v 2223 //通过key为order_hash 导出值为2223的数据
框架:
├─common 日志和一些工具函数
├─conf yaml配置文件
├─config viper的初始化
├─dao 对配置的底层解析接口
├─data 数据库的导出/导入目录
├─handler 网页的接口层
├─log 日志存放地点
├─model 需要用到的结构体数据
├─resp 结构返回的结构体
└─service 对dao层封装的服务结构
TODO
- bucket 换成私有的
- 生成的账号补全手机号以及其他信息
- 不要通过调接口实现,而是通过加参数实现
- 脱敏在数据导出时完成
- 解决一个线上uid对应一个测试环境uid的问题