前一阵子听说阿里有个专门做数据库同步的工具挺不错的,今天专门过来尝尝鲜
Github地址:datax
下载源码的话需要自己手动编译,像我这么懒的人肯定不会啦,所以直接去下载成品。在Quick Start部分可以看到官方为我们贴心的准备好了下载地址
下载datax之后,目录结构如下
我们目前只关心bin目录和job目录,因为bin目录有执行同步程序的脚本 -> datax.py
,job目录有任务文件 -> job.json
,通过配置job.json
可以确定同步的数据源和目标数据库,数据库的所有信息都是在这里面配置的。
执行datax.py
脚本最好需要python2.x的环境,python3.x会导致datax.py
脚本中的print打印报错
接下来我的需求是将SqlServer中BPower_GS.dbo.sszt_jbxx110497表同步到Mysql中client.sszt_jbxx110497中,这两个表结构都是一样的。之前我自己也专门用java代码实现了一个同步程序,参见我的另一篇博客 -> Java数据同步。觉得自己写的还是太low了,cv大法不香么,于是我开始研究DataX。
Github上的README.md文件已经提供了各个数据库读写参数的配置,直接cv之后改改账号密码、数据库表啥的就行了,如果有精力的话,顺便再研究研究哪些是调优参数,本文就不介绍的那么麻烦了,只要把Sqlserver表的数据同步到Mysql中任务就算完成。
找到Mysql,点“写”:
将writer这部分配置粘贴到job/job.json中
然后找到Sqlserver,点“读”:
将Reader部门的代码粘贴到job/job.json中
然后改改参数,文件结构如下:
{
"job":{
"setting":{
"speed":{
"channel":1
}
},
"content":[
{
"reader": { // Sqlserver配置
"name": "sqlserverreader",
"parameter": {
"username": "sa", // 的账号
"password": "Ilasnt1", // 密码
"column": [ // 有哪些字段,我这里只简单配置了前5个
"JYFW",
"ZCZB",
"RECORDID",
"QYMC",
"DJJGDH"
],
"splitPk": "ins", // 用来分片的主键
"connection": [
{
"table": [
"sszt_jbxx110497" // 表名
],
"jdbcUrl": [
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=BPower_GS" // jdbc url
]
}
]
}
},
"writer":{ // mysql配置
"name":"mysqlwriter",
"parameter":{
"writeMode":"insert", // 取值范围insert/replace/update,默认就是insert
"username":"root",
"password":"root",
"column":[
"JYFW",
"ZCZB",
"RECORDID",
"QYMC",
"DJJGDH"
],
"preSql":[
"delete from sszt_jbxx110497" // 同步前会先删除表
],
"connection":[
{
"jdbcUrl":"jdbc:mysql://127.0.0.1:3306/client?useUnicode=true&characterEncoding=UTF-8",
"table":[
"sszt_jbxx110497"
]
}
]
}
}
}
]
}
}
注意目前splitPk仅支持整形型数据切分,不支持浮点、字符串、日期等其他类型。如果用户指定其他非支持类型,SqlServerReader将报错!
splitPk设置为空,底层将视作用户不允许对单表进行切分,因此使用单通道进行抽取。
然后通过python执行脚本,指定任务json文件
python .\datax.py ..\job\job.json
开始执行
同步完成