1.实训目标
掌握datax对mysql to mysql进行全量同步操作
2.实训环境
Linux
使用datax
使用mysql
3.实训内容
使用datax实现mysql to mysql的全量同步操作
4.实训步骤
首先按顺序初始化实验环境
4.1.全量同步
mysql-uroot-p登录mysql
密码为root!@#123ROOT
为用户授权
grant all privileges on*.*to'root'@'%'identified by'root!@#123ROOT'with grant option; flush privileges;
创建数据库
create database test;
use test;
创建表格
CREATE TABLE IF NOT EXISTS`test`(
`id`INT UNSIGNED AUTO_INCREMENT,
`info`VARCHAR(100)NOT NULL,
`remark`VARCHAR(40)NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS`test1`(
`id`INT UNSIGNED AUTO_INCREMENT,
`info`VARCHAR(100)NOT NULL,
`remark`VARCHAR(40)NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
insert into test values(1,'datax','hello');
insert into test values(2,'mysql','hello');
查看数据
select*from test;
4.1.1.原表
4.1.2.配置json文件
访问官方文档获取文件规范格式
分别获取mysqlreader与mysqlwriter的配置格式,配置mysql_to_mysql.json
cd/opt/datax/job
vim mysql_to_mysql.json
{
"job":{
"setting":{
"speed":{
"channel":3
},
"errorLimit":{
"record":0,
"percentage":0.02
}
},
"content":[
{
"reader":{
"name":"mysqlreader",
"parameter":{
"username":"root",
"password":"root!@#123ROOT",
"column":[
"*"
],
"connection":[
{
"table":[
"test"
],
"jdbcUrl":[
"jdbc:mysql://:3306/test?allowMultiQueries=true&useUnicode=true&characte rEncoding=utf8"
]
}
]
sql语句替换表中内容}
},
"writer":{
"name":"mysqlwriter",
"parameter":{
"writeMode":"insert",
"username":"root",
"password":"root!@#123ROOT",
"column":[
"*"
]
,
"preSql":[
"delete from test1"
],
"connection":[
{
"jdbcUrl":
"jdbc:mysql://:3306/test?useUnicode=true&characterEncoding=gbk",
"table":[
"test1"
]
}
]
}
}
}
]
}
}
Ps:使用在线json网站可以检验json文件的格式
4.1.3主要参数解释
username/password:数据库用户及密码
Jdbc:描述目的数据库的JDBC连接信息
table:目的表的表名称。支持写入一个或者多个表。当配置为多张表时,必须确保所有表结构保持一致。
column:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如:"column": ["id","name","age"]。如果要依次写入全部列,使用*表示,例如:"column":
["*"]。
Where:筛选条件,MysqlReader根据指定的column、table、where条件拼接SQL,并根据这个SQL进行数据抽取。在实际业务场景中,往往会选择当天的数据
进行同步,可以将where条件指定为gmt_create>$bizdate。注意:不可以
将where条件指定为limit10,limit不是SQL的合法where子句。
where条件可以有效地进行业务增量同步。如果不填写where语句,包括不
提供where的key或者value,DataX均视作同步全量数据。
querySql:在有些业务场景下,用户可以通过该配置型来自定义筛选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选项。
preSql:写入数据到目的表前,会先执行这里的标准语句。如果Sql中有你需要操作到的表名称,请使用@table表示,这样在实际执行Sql语句时,会对变
量按照实际表名称进行替换。比如你的任务是要写入到目的端的100个同构
分表(表名称为:datax_00,datax01,...datax_98,datax_99),并且你希望导入数
据前,先对表中数据进行删除操作,那么你可以这样配置:"preSql":["delete
from表名"],效果是:在执行到每个表写入数据前,会先执行对应的delete
from对应表名称
writeMode:控制写入数据到目标表采用insert into或者replace into或者ON DUPLICATE KEY UPDATE语句
Ps:其余参数释义可在官方文档中查询
4.1.4运行json文件
cd/opt/datax/bin
python datax.py../job/mysql_to_mysql.json
同步任务执行完成,显示日志如图所示
可进入目标数据库查询同步结果
4.1.4注意事项
1.目标数据库库表结构需要提前创建,与原本表结构保持一致
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论