Linux使用DataX3.0 ~笔记-持续更新中
一、Liunx 上安装DataX
- 查看当前系统版本
- 查看系统的名称,命令:uname
- 查看具体的系统版本,命令:cat /etc/redhat-release
查看是否具备jdk和python环境:
- 查看jdk版本,命令:java -version
- 查看python的版本,命令(大写V):python -V
注意:
- JDK(1.6以上,1.8即可)
- Python(一般2.7都可以)一定要为python2,因为后面执行datax.py的时候,里面的python的print会执行不了,导致运行不成功,会提示你print语法要加括号,python2中加不加都行 python3中必须要加,否则报语法错
DataX下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
- 下载后使用文件传输工具传输到linux上的opt目录下,解压
解压命令:
- DataX自检
解压成功后,进入bin目录,开始自检,命令:
出现以下界面说明DataX安装成功
二、Job作业 JOSN文件配置模板
- “writeMode”: “insert”:表示数据是新增,可改为update,但是表中要有唯一主键
- preSql:预先执行的sql,在其他操作之前执行
三、实操示例:MySql 同步到 MySql
#将mysql dataxhub库下c_jkgl_area表(21行内的查询结果)同步到c_jkgl_area_copy1
为避免MySQL关键字为字段名的情况,而造成DataX报错,column中的字段需用 “ ”双引号包起来。
1、将编辑好后的json文件【job_mysqlTomysql.json】放入安装目录下/datax/job目录
2、再进入datax/bin目录 执行以下命令运行,即可将读库中的表数据写入写库的表中:
3、查询目标表查看
与读出总数一致。
但是中文字段展示为了 ??? 符号。
经排查:连接池地址(url)后要加上:
完整jdbcUrl示例:
MySQL8.0以上版本,url需要添加相关配置
- 指定时区:serverTimezone=Asia/Shanghai
- 指定字符编码:characterEncoding=utf8
- 安全套接字协议:useSSL=false (false:就是通过账号密码进行连接, true:就是一般通过证书或者令牌进行安全验证)
4、完整JSON示例:
完善了jdbcurl
重新执行后,表中中文字段部分展示正常了。
四、实操示例:Oracle 同步到 MySql
1、Oracle表同步到Mysql表 json示例:
2、增量同步参考
oracle同步mysql(全量和增量)https://blog.csdn.net/zhuyu19911016520/article/details/124143716
五、实操示例:MySql8.x 版本同步到 MySql5.7
```json { "job": { "setting": { "speed": { "byte": "1048576" } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "your_username", "password": "your_password", "column": ["*"], "where": "your_condition", "connection": [ { "querySql": [ "SET @SESSION.SQL_MODE=ANSI_QUOTES;" ], "jdbcUrl": [ "jdbc:mysql://your_host:your_port/your_database_name?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC" ] } ], "splitPk": "your_pk_column", "table": [ "your_table_name" ] } }, "writer": { "name": "mysqlwriter", "parameter": { "username": "your_username", "password": "your_password", "column": ["*"], "replace": true, "updateKey": ["your_update_column"], "session": [ "SET sql_mode='STRICT_TRANS_TABLES';" ], "connection": [ { "jdbcUrl": "jdbc:mysql://your_host:your_port/your_target_database_name?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC" } ], "table": "your_target_table_name" } } } ] } } ```
说明: - 需要修改的参数有:
`your_username`(MySQL 数据库用户名)
`your_password`(MySQL 数据库密码)
`your_condition`(SELECT 查询条件)
`your_host`(主机名或 IP 地址)
`your_port`(MySQL 数据库端口)
`your_database_name`(源数据库名称)
`your_table_name`(源数据库表名)
`your_pk_column`(源数据库表主键列名)
`your_update_column`(目标数据库表的用于 update 的列名)
`your_target_database_name`(目标数据库名称)和
your_target_table_name`(目标数据库表名)。 - 另外,MySQL 5.7 版本可能不支持 MySQL 8 中特的数据类型和语法,因此在导入目标数据库表之前需要确保列类型和语法兼容。 使用方法: - 将以上 JSON 配置文件保存为 `mysql_8_to_5.json`。 - 在 DataX 工具的执行目录下执行以下命令:`python bin/datax.py mysql_8_to_5.json`。 - DataX 将会将 MySQL 8 中的数据导出并导入到 MySQL 5.7 中。