Linux使用DataX3.0 ~笔记-持续更新中

 

一、Liunx 上安装DataX

  1. 查看当前系统版本
  • 查看系统的名称,命令: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中必须要加,否则报语法错

descript

DataX下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

  1. 下载后使用文件传输工具传输到linux上的opt目录下,解压

解压命令:

  1. DataX自检

解压成功后,进入bin目录,开始自检,命令:

出现以下界面说明DataX安装成功

descript

二、Job作业 JOSN文件配置模板

  • “writeMode”: “insert”:表示数据是新增,可改为update,但是表中要有唯一主键
  • preSql:预先执行的sql,在其他操作之前执行

三、实操示例:MySql 同步到 MySql

#将mysql dataxhub库下c_jkgl_area表(21行内的查询结果)同步到c_jkgl_area_copy1

为避免MySQL关键字为字段名的情况,而造成DataX报错,column中的字段需用 “ ”双引号包起来。

descript

1、将编辑好后的json文件【job_mysqlTomysql.json】放入安装目录下/datax/job目录
2、再进入datax/bin目录 执行以下命令运行,即可将读库中的表数据写入写库的表中:

descript

3、查询目标表查看

与读出总数一致。

descript

但是中文字段展示为了 ??? 符号。

descript

经排查:连接池地址(url)后要加上:

完整jdbcUrl示例:

MySQL8.0以上版本,url需要添加相关配置

  • 指定时区:serverTimezone=Asia/Shanghai
  • 指定字符编码:characterEncoding=utf8
  • 安全套接字协议:useSSL=false (false:就是通过账号密码进行连接, true:就是一般通过证书或者令牌进行安全验证)
4、完整JSON示例:

完善了jdbcurl

重新执行后,表中中文字段部分展示正常了。

descript

四、实操示例: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 中。
posted @ 2023-03-07 15:28  LuckinAaron  阅读(213)  评论(0编辑  收藏  举报