张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

DataX初体验

发表于 2020-06-04 | 分类于 默认分类 | 0 | 阅读次数 33

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

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

# Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
Redis扩展类型
Golang初体验
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

57 日志
19 分类
28 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号