DataX在mysql间数据迁移操作

旧时模样 提交于 2020-03-23 14:49:01

3 月,跳不动了?>>>

DataX在mysql间数据迁移操作

DataX概览

MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReader通过JDBC连接远程Mysql数据库,并执行相应的sql语句将数据从mysql库中SELECT出来。 不同于其他关系型数据库,MysqlReader不支持FetchSize.

github

可以开发自己的reader或writer插件,也可以对已经存在的进行改进

DataX3.0文档

实现原理

简而言之,MysqlReader通过JDBC连接器连接到远程的Mysql数据库,并根据用户配置的信息生成查询SELECT SQL语句,然后发送到远程Mysql数据库,并将该SQL执行返回结果使用DataX自定义的数据类型拼装为抽象的数据集,并传递给下游Writer处理。 对于用户配置Table、Column、Where的信息,MysqlReader将其拼接为SQL语句发送到Mysql数据库;对于用户配置querySql信息,MysqlReader直接将其发送到Mysql数据库。

快速上手

构建一个测试数据表

新建表test语句如下所示。

CREATE TABLE `test` (
  `name` varchar(20) COLLATE utf8_bin NOT NULL,
  `age` int(4) NOT NULL,
  `age_true` int(2) DEFAULT NULL
)

并向其中插入40条数据

insert into test(`name`,age,age_true) values("lihao",20,3)
...

然后新建表2:test1

CREATE TABLE `test1` (
  `name` varchar(10) COLLATE utf8_bin NOT NULL,
  `age1` int(10) NOT NULL
)

构建任务Json

DataX工具是用json文件作为配置文件的,根据官方提供文档我们构建Json文件如下所示。

{ 
    "job": { 
        "content": [ 
            { 
                "reader": { 
                    "name": "mysqlreader",
                    "parameter": { 
                        "username": "root", 
                        "password": "DTCserver2019!",  
                        "column": ["name","age"], 
                        "where": "age<100", 
                        "connection": [ 
                            { 
                                "table": [ 
                                    "test" 
                                ], 
                                "jdbcUrl": [ 
                                    "jdbc:mysql://10.3.7.231:3306/real_time_alarm_data?characterEncoding=utf8"
                                ] 
                            } 
                        ] 
                    } 
                }, 
                "writer": { 
                    "name": "mysqlwriter",
                    "parameter": { 
                        "username": "root", 
                        "password": "DTCserver2019!", 
                        "column": ["name","age1"],
                        "connection": [ 
                            { 
                                "table": [ 
                                    "test1" 
                                ], 
                                "jdbcUrl":"jdbc:mysql://10.3.7.231:3306/real_time_alarm_data?characterEncoding=utf8"                              
                            } 
                        ]   
                    } 
                } 
            } 
        ], 
        "setting": {
                 "speed": {
                         "channel": 1,
                         "byte": 104857600
                 },
                 "errorLimit": {
                         "record": 10,
                         "percentage": 0.05
      }
    } 
}
}

它由三部分组成,分别是读,写和通用配置。

Reader部分,也就是读,常用以下几种参数,如表2-3所示。

表2-3 读参数表

参数名 解释 备注 是否必须/默认值
name 与要读取的数据库一致 name
jdbcUrl 数据库链接 数组会自动选择一个合法的链接可以填写连接附件控制信息 是/无
username 用户名 字符串,数据库的用户名 是/无
password 密码 字符串,数据库的密码 是/无
table 要同步的表名 数组,需保证表结构一致 是/无
column 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。用户使用代表默认使用所有列配置,例如['']。支持列裁剪,即列可以挑选部分列进行导出。<br/>支持列换序,即列可以不按照表schema信息进行导出。<br/>支持常量配置,用户需要按照Mysql SQL语法格式: ["id", "table", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"] id为普通列名,table为包含保留在的列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。 是/无
where 选取的条件 支持列裁剪,即列可以挑选部分列进行导出。字符串 否/无
querySql 在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id 当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置,querySql优先级大于table、column、where选项。 否/无

Writer部分,也就是写,常用以下几种参数,如表2-4所示。

参数名 解释 备注
name 与要读取的数据库一致 字符串
jdbcUrl 数据库链接 字符串不和writer一样可以填写连接附件控制信息
username 用户名 字符串,数据库的用户名
password 密码 字符串,数据库的密码
table 要同步的表名 数组,需保证表结构一致
column 要同步的列名 列名可以不对应,但是类型和总的个数要一致
preSql 写入前执行的语句 数组,比如清空表等
postSql 写入后执行的语句 数组
writeMode 写入方式,默认为insert insert/replace/update

job.setting.speed(流量控制) Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度 job.setting.errorLimit(脏数据控制) Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。

执行

  1. 将上面的json文件放到/data/job目录下,然后
./bin/data.py ./job/test.json

然后通过脚本或者java程序定时执行之。

参考

使用DataX在MySQL之间同步数据

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!