DataX 是阿里云 DataWorks 数据集成的开源版本,是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台。DataX 支持多种异构数据源之间高效的数据同步功能。
1.DataX 工作原理DataX 作为离线数据同步框架,采用 "Framework + Plugin" 模式构建。将数据源读取和写入抽象为 Reader/Writer 插件,纳入到整个同步框架中。
l Reader 作为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。
l Writer 作为数据写入模块,负责不断向 Framework 获取数据,并将数据写入到目的端。
l Framework 用于连接 Reader 和 Writer,作为两者的数据传输通道,并处理缓冲、流控、并发、数据转换等核心技术问题。
2. 准备工作2.1 环境要求
l 安装 JDK 1.8 或更高版本
l 安装 Python 2.7 或 3.x
l 下载并解压 DataX 工具包
2.2 数据库准备
在目标数据库中创建与源数据库相同的表结构(DataX 仅迁移数据,不迁移表结构)
确保源数据库和目标数据库都能与运行 DataX 的服务器建立网络连接。
3. 迁移数据DataX 以任务的形式迁移数据。每个任务只处理一个表,每个任务有一个 json 格式的配置文件,配置文件里包含 reader 和 writer 两部分。
配置文件示例:
{"job": {
"content": [{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "***",
"password": "***",
"column": ["*"],
"connection": [
{"table": ["test"],
"jdbcUrl": ["jdbc:mysql://mysql_ip:3306/mysql_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false"]
}]}},
"writer": {"name": "oceanbasev10writer","parameter": {"obWriteMode": "insert","column": ["*"],"preSql": [],
"connection": [{"jdbcUrl": "jdbc:mysql://oceanbase_ip:2881/oceanbasetest?useUnicode=true&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true",
"table": ["test"]}],
"username": "***",
"password":"***",
"writerThreadCount":10,
"batchSize": 1000,
"memstoreThreshold": "0.9"
}}}],
"setting": {
"speed": {"channel": 2}}}}
reader 和 writer 分别对 DataX 支持的数据库读写插件,将 MySQL 表数据迁移到 OceanBase 数据库操作时,需要从 MySQL 读取数据写入 OceanBase 数据库,因此使用的插件为 MySQL 数据库的 mysqlreader 插件和 OceanBase 数据库的 oceanbasev10writer 插件来搭配完成。
4. 执行迁移任务将 json 配置文件放到 DataX 的目录 job 下,或者自定义路径。执行方法如下:
$bin/datax.py job/test.json
5. 执行结果