概述
业务中经常会用到数据全量同步和增量同步,用sqlDump只能全量同步,而且数据量大的时候很慢。
阿里的datax目前是一款不错的同步工具
环境要求:
jdk:1.8+
python:2.7
maven:3.0+
3.0
的python
跑不起来
ps
:开源版的datax
的mysql
驱动还是用的5.1.x
的,如果用的mysql
已经是高版本了,需要换下驱动.换驱动的时候记得read
和writer
都要换一下。
demo
直接跟着datax
的quick start
开始敲就完事
https://github.com/alibaba/DataX/blob/master/userGuid.md
我是直接下载的工具包,然后直接查看read
和write
模板,直接按照模板copy
一个.json
的文件
python datax.py -r {YOUR_READER} -w {YOUR_WRITER}
文件deom
如下
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "xxx",
"password": "xxx",
"where": "",
"connection": [
{
"querySql": [
"select * from sys_oper_log;"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:33306/ruoyi_5?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://127.0.0.1:33306/datax_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true",
"table": ["sys_oper_log"]
}
],
"password": "xxx",
"preSql": [
],
"session": [
"set session sql_mode='ANSI'"
],
"username": "xxx",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "5"
}
}
}
}
直接运行
python2.7 datax.py test.json
datax_web下载启动
上面的datax
一个麻烦的地方就是一个同步操作就需要命令新建一个json
文件,操作一多就有点麻烦;
所以一个web
管理界面统一入口,就显得必要了,当然也是直接拿现成了;
https://github.com/WeiYe-Jing/datax-web
这是需要的环境和中间件,可以提前部署一下
#下载
git clone https://github.com/WeiYe-Jing/datax-web.git
#编译--编译后在build目录下生成文件
mvn clean install
#解压
tar -zxvf datax-web-2.1.2.tar.gz
#到自己的db里初始化一下sql
/bin/db/datax-web.sql
#指定自己的db---修改datax-admin/conf/bootstrap.properties的文件中的数据库配置
vi ./modules/datax-admin/conf/bootstrap.properties
#如果有多个jdk版本,需要到这2个module下的环境变量文件中指定下java_home
vi modules/datax-admin/bin/env.properties
vi modules/datax-executor/bin/env.properties
#启动
./bin/start-all.sh
一波成功
datax_web使用
先说明一下我的环境
ubuntu20.04
默认的python
版本是python3
mysql8.0
java
有多个版本,给datax_web
使用的是java8
(我这里部署的时候官方文档指定用的就是8
)
这里先介绍几个注意点;
1-mysql
我这边用的是8
,默认的mysql
驱动用的是5
,高版本的需要自己另外下个驱动,然后丢到modules
下的datax-admin
依赖中去,
/home/ubuntu/datax_web/datax-web-2.1.2/modules/datax-admin/lib
2-python
版本,我这里ubuntu
默认是python3
,但是脚本默认datax
默认使用的是python2.7
,所以这里可以在下载的datax_web
文件的doc
目录下找到datax/bin/
下对应的三个py
文件,替换下就行
流程大概是这样的:
- 创建项目
- 添加数据源(源db和目标db)
- 任务构建
新建项目
添加数据源
新建定时任务
和xxljob差不多,直接新建即可
任务构建
直接点点点再下一步就ok了,最后按照提示关联下定时任务,即可