一、DataX3.0 概述和核心优势
参考官网,这里就不多做介绍:DataX3.0介绍.
DataX快速开始说明:快速开始文档.
二、Liunx 上安装DataX
1.查看当前linux
是什么系统版本:
- 查看系统的名称,命令:
uname
- 查看具体的系统版本,命令:
cat /etc/redhat-release
2.查看是否具备jdk
和python
环境:
- 查看
jdk
版本,命令:java -version
- 查看
python
的版本,命令:python -v
注意:
-
JDK(1.6以上,1.8即可)
-
Python(一般2.7都可以)一定要为python2,因为后面执行datax.py的时候,里面的python的print会执行不了,导致运行不成功,会提示你print语法要加括号,python2中加不加都行 python3中必须要加,否则报语法错
3.如果上一步的环境不存在则参考下面的博客进行环境安装:
-
安装java环境,参考博客(不用按照步骤去卸载,直接看安装步骤即可):https://blog.csdn.net/love3765/article/details/88783126.
-
安装python环境,参考博客(安装步骤全部执行即可):https://www.cnblogs.com/Jomini/p/10507077.html.
4.下载DataX:
-
下载DataX安装包(直接下载):http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz.
-
下载DataX安装包(如果上一步目录不存在,找到网址下的Quick Start标题即有下载地址):https://github.com/alibaba/DataX.
5.解压DataX
下载后使用文件传输工具传输到linux上的opt目录下
解压命令:
cd /opt
tar -zxvf datax.tar.gz -C /opt/
6.DataX自检
解压成功后,进入bin目录,开始自检,命令:
cd datax/bin
python datax.py …/job/job.json
查看日志,完成自检!
三、使用DataX
1.新建两个mysql
库:datax、datax2
,分别使用运行以下建表sql:
CREATE TABLE `datax_test` (`id` int(10) NOT NULL COMMENT '主键ID',`name` varchar(255) DEFAULT NULL COMMENT '名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
运行成功后在datax2
中新增几条测试数据,datax
中不新增。
2.建立新的job
作业json
文件,如下(复制即可用):
job_mysql2mysql.json:
{
"job": {
"setting": {
"speed": {
"channel": 1},"errorLimit": {
"record": 0,"percentage": 0.02}},"content": [{
"reader": {
"name": "mysqlreader", "parameter": {
"column": ["`id`","`name`"], "connection": [{
"jdbcUrl": ["jdbc:mysql://localhost:3306/datax2"], "table": ["datax_test"]}], "username": "root","password": "******"}}, "writer": {
"name": "mysqlwriter", "parameter": {
"writeMode": "insert","username": "root","password": "******","column": ["`id`","`name`"],"session": ["set session sql_mode='ANSI'"],"preSql": ["delete from datax_test"], "connection": [{
"jdbcUrl": "jdbc:mysql://localhost:3306/datax", "table": ["datax_test"]}]}}}]}
}
“writeMode”: “insert”
:表示数据是新增,可改为update,但是表中要有唯一主键preSql
:预先执行的sql,在其他操作之前执行
以上的json是新增时使用,有个preSql(预执行sql),看情况使用
3.将job_mysql2mysql.json
文件放入/opt/datax/
目录下,执行以下命令运行,即可将读库中的表数据写入写库的表中:
python datax.py /opt/datax/job/job_mysql2mysql.json
注意点:
大家可以看到JSON文件中的column
中写了详细的参数,而不用*
号,以及字段用`
符号包起来。
先说第一点,详细的字段方便在以后的定时增量同步起到很大的避免错误的作用,如果读库和写库的表结构一样,在读库(reader)中的表增加了一个字段,而写库(writer)并没有这个字段,执行脚本时会报错,所有不用*号,并且新增和修改字段都要双方同步。
第二点,为什么用`
符号将字段包起来,博主已踩坑,大家不要跳坑了。因为日常开发中一个数据库是很多开发人员维护的,难免会出现MySQL关键字为字段名的情况,DataX执行时发现某个字段是MySQL关键字则会直接报错,所以每个字段最好包起来。
相关文章
- DataX | MySQL多表全量同步和多表定时增量同步.
- DataX踩坑:连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port.