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 中。

浙公网安备 33010602011771号