DataX初体验

前一阵子听说阿里有个专门做数据库同步的工具挺不错的,今天专门过来尝尝鲜

Github地址:datax

下载源码的话需要自己手动编译,像我这么懒的人肯定不会啦,所以直接去下载成品。在Quick Start部分可以看到官方为我们贴心的准备好了下载地址

DataX下载地址

下载datax之后,目录结构如下
image.png
我们目前只关心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中任务就算完成。

image.png

找到Mysql,点“写”:

将writer这部分配置粘贴到job/job.json中
image.png

然后找到Sqlserver,点“读”:

将Reader部门的代码粘贴到job/job.json中
image.png

然后改改参数,文件结构如下:

{
    "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

开始执行
image.png

同步完成
image.png

# DataX 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×