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": "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的数组描述字段信息。用户使用代表默认使用所有列配置,例如['']。支持列裁剪,即列可以挑选部分列进行导出。
支持列换序,即列可以不按照表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程序定时执行之。
参考
来源:oschina
链接:https://my.oschina.net/112612/blog/3209030