datax mysql replace_DataX在mysql间数据迁移操作

1f76b5a2b45ffb54defe6c81b8358f16.png

DataX在mysql间数据迁移操作

DataX概览

MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReader通过JDBC连接远程Mysql数据库,并执行相应的sql语句将数据从mysql库中SELECT出来。

不同于其他关系型数据库,MysqlReader不支持FetchSize.

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

实现原理

简而言之,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": "xxx",

"column": ["name","age"],

"where": "age<100",

"connection": [

{

"table": [

"test"

],

"jdbcUrl": [

"jdbc:mysql://10.3.7.xxx:3306/real_time_alarm_data?characterEncoding=utf8"

]

}

]

}

},

"writer": {

"name": "mysqlwriter",

"parameter": {

"username": "root",

"password": "xxx",

"column": ["name","age1"],

"connection": [

{

"table": [

"test1"

],

"jdbcUrl":"jdbc:mysql://10.3.7.xxx: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的数组描述字段信息。用户使用代表默认使用所有列配置,例如[""]。支持列裁剪,即列可以挑选部分列进行导出。
支持列换序,即列可以不按照表schema信息进行导出。
支持常量配置,用户需要按照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报错退出。

执行

将上面的json文件放到/data/job目录下,然后

./bin/data.py ./job/test.json

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

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值