从Mysql到阿里云时序数据库InfluxDB的数据迁移
从Mysql 到 InfluxDB的数据迁移
背景
本文主要介绍如何使用阿里巴巴的开源工具Datax 实现从 MySQL 到 InfluxDB 的数据迁移。
DataX相关使用介绍请参阅 DataX 的 README 文档。
下面将首先介绍 DataX 工具本身,以及本次迁移工作涉及到的两个插件(MySQL Reader 和 InfluxDB Writer)。
DataX
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台,实现包括 MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
MySQL Reader
MySQL Reader 是 DataX 的一个插件,实现了从 MySQL 读取数据。
InfluxDB Writer
InfluxDB Writer 是 DataX 的一个插件,实现了将数据点写入到阿里云时序数据库Influxdb版中。
Quick Start
步骤一:环境准备
- Linux
- JDK(1.8 以上,推荐 1.8)
- Python(推荐 Python 2.6.x)
- MySQL(目前只支持兼容 5.x,其他版本暂不保证兼容)
- InfluxDB(目前只支持兼容 1.7.x 及以上版本,其他版本暂不保证兼容)
步骤二:下载 DataX 及其插件
点击 链接 进行下载。
步骤三:利用 DataX 自带的迁移任务,检查迁移流程能否走通
这里,我们先以最简单的 Stream Reader 到 Stream Writer 为例。因为这两个插件不依赖任何的外部环境,特别适合用来测试流程是否能走通。简单介绍下这两个插件,其中 Stream Reader 会随机地产生字符串,而 Stream Writer 则会将接受到的字符串输出到控制台,以此模拟一个最简单的数据迁移过程。
工具部署
将下载后的安装包,解压至某个目录(作为 DATAX_HOME),即可运行迁移任务:
cd ${DATAX_HOME} $ python bin/datax.py job/job.json
检查任务是否成功
下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:
任务启动时刻 : 2019-04-26 11:18:07 任务结束时刻 : 2019-04-26 11:18:17 任务总计耗时 : 10s 任务平均流量 : 253.91KB/s 记录写入速度 : 10000rec/s 读出记录总数 : 100000 读写失败总数 : 0
步骤四:配置和启动 MySQL 到 InfluxDB 的迁移任务
通过上述 Stream Reader 到 Stream Writer 的迁移任务,我们就可以确保整个 DataX 流程是没有问题的。下面就可以真正开始 MySQL Reader 到 InfluxDB Writer 迁移任务了。
配置迁移任务
配置一个从 MySQL 数据库同步抽取数据到 TSDB 的任务,命名为 mysql2influxdb.json
,完整的配置信息如下(针对各个配置参数的详细说明,请看下一章节”参数说明”):
{ "job": { "content": [ { "reader": { "name": "mysqlreader", "parameter": { "column": [ "host", "unit", "create_time", "cpu", "memory" ], "connection": [ { "jdbcUrl": [ "jdbc:mysql://rm-uf6on2p0d0knt05545o.mysql.rds.aliyuncs.com:3306/datax" ], "table": [ "machine" ] } ], "password": "Test1234", "splitPk": "id", "username": "test1" } }, "writer": { "name": "influxdbwriter", "parameter": { "column": [ "host", "unit", "create_time", "cpu", "memory" ], "columnType": [ "tag", "tag", "timestamp", "field", "field", ], "sourceDbType": "RDB", "endpoint": "https://ts-uf6k2467q98lmj088.influxdata.rds.aliyuncs.com:3242", "username": "admin", "password": "123456", "database": "datax", "createDatabase": true, "measurement": "machine", } } } ], "setting": { "speed": { "channel": 1 } } } }
启动 MySQL 2 InfluxDB 迁移任务
$ cd ${DATAX_HOME}/.. $ ls datax/ datax.tar.gz mysql2influxdb.json $ python datax/bin/datax.py mysql2influxdb.json
检查任务是否成功
下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:
任务启动时刻 : 2019-09-21 18:25:16 任务结束时刻 : 2019-09-21 18:25:27 任务总计耗时 : 11s 任务平均流量 : 3B/s 记录写入速度 : 0rec/s 读出记录总数 : 3 读写失败总数 : 0
参数说明
MySQL Reader 相关
名称 | 类型 | 是否必需 | 描述 | 默认值 | 举例 |
---|---|---|---|---|---|
jdbcUrl | String | 是 | 数据库的 JDBC 连接信息 | 无 | jdbc:mysql://127.0.0.1:3306/datax |
username | String | 是 | 数据源的用户名 | 无 | root |
password | String | 是 | 数据源指定用户名的密码 | 无 | root |
table | String | 是 | 需要同步的表 | 无 | book |
column | Array | 是 | 表中需要同步的列名集合 | [] | ["m"] |
splitPk | String | 否 | 如果指定 splitPk,表示用户希望使用 splitPk 代表的字段进行数据分片 | 空 | id |
InfluxDB Writer 相关
名称 | 类型 | 是否必需 | 描述 | 默认值 | 举例 |
---|---|---|---|---|---|
sourceDbType | String | 否 | 目前支持 TSDB 和 RDB 两个取值。其中,TSDB 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS 等 | TSDB | RDB |
column | Array | 是 | 表中需要同步的列名集合 | [] | ["host","unit","create_time","cpu","memory"] |
columnType | Array | 是 | 关系型数据库中表字段,映射到 InfluxDB 中的类型。 支持的类型: timestamp:该字段是个时间戳; tag:该字段是个 tag; field:该字段代表具体的采集的指标值。其value一般是数值类型; | [] | ["tag","tag","timestamp","field","field"] |
endPoint | String | 是 | InfluxDB的网络地址 | 无 | https://ts-xxxx.influxdata.tsdb.aliyuncs.com:3242 |
username | String | 是 | InfluxDB用户名 | 无 | admin |
password | String | 是 | InfluxDB用户密码 | 无 | 123456 |
batchSize | int | 否 | 每次批量数据的条数(需要保证大于 0) | 100 | 100 |
createDatabase | bool | 否 | true: 会自动创建数据库 false: 不会自动创建数据库。 | true | true |
database | String | 是 | 导入InfluxDB的数据库名称 | 无 | datax |
batchSize | int | 否 | 每次批量数据的条数(需要保证大于 0) | 100 | 100 |
注意事项
确保与 InfluxDB 的网络是连通的
因为 InfluxDB Writer 写入数据的方式是调用InfluxDB的api来完成的,所以需要确保迁移任务的进程能正常访问到 InfluxDB 暴露出来的 HTTP 接口的。否则,会报错 Connect Exception 异常。
确保与 MySQL 的网络是连通的
因为 MySQL Reader 读取数据是通过 JDBC 来完成的,所以需要确保迁移任务的进程能正常访问到 MySQL 暴露出来的 JDBC 接口的。否则,会报错 Connect Exception 异常。
需要 column 字段顺序保持一致
需要保证 InfluxDB Writer 插件中的 column 字段顺序和 MySQL reader 插件中配置的 column 字段顺序保持一致。否则,数据会错乱。
FAQ
Q:是否支持调整迁移进程的 JVM 内存大小?
A:支持的。以”从 MySQL 到 InfluxDB 的数据迁移任务”为例,启动命令如下:
python datax/bin/datax.py mysql2influxdb.json -j "-Xms4096m -Xmx4096m"
Q:将迁移任务运行在 ECS 上的用户,如何配置 VPC,以及常见问题有哪些?
A:参考《ECS 安全组配置案例》和《VPC 常见问题》。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JS基础知识整合
1、执行环境:有时也叫环境,是JavaScript中最为重要的一个概念,执行环境定义了变量或函数有权访问的其他数据。 2、变量对象:每一个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个的对象中。 3、作用域链:代码在环境中执行时,会创建变量对象的作用域链,保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终是当前执行代码所在环境的变量对象。 4、活动对象:如果当前执行环境是函数,则将活动对象作为变量对象。 5、可执行代码: 1)全局代码:例如加载外部的JS文件或者本地标签内的代码,全局代码不包括function体内的代码; 2)函数代码:function体内的代码; 3) eval代码:eval()函数计算某个字符串,并执行其中的JS代码,比如 eval("alert('helloworld')")。 6、执行上下文栈:在一个JS程序中,必定会产生多个执行上下文,JS引擎会以栈的方式来处理它们,也就是执行上下文栈。 7、作用域:JS是一种没有块级作用域的语言(包括if、for等语句的花括号代码块或者单独的花括号代码块都不能形成一个局部作用...
- 下一篇
Proxy-Go SDK v8.4 发布,新增内网穿透 P2P、TCP 指定出口 IP!
Proxy-Go全平台SDK是proxy使用gombile实现了一份go代码编译为android和ios平台下面可以直接调用的sdk类库, 另外还为linux和windows提供sdk支持,基于这些类库,APP开发者可以轻松的开发出各种形式的代理工具,比如代理池,安全代理。 走过路过不要错过。 更新情况如下: sps增加了 --hosts 参数,格式是:domain@IP,domain@IP 优化了内网穿透传输,提升了速度。 内网穿透server增加了--server-id参数。 内网穿透增加了p2p支持,server和client端nat网络环境满足p2p的情况下, 可以开启server和client的p2p传输,流量不再经过bridge,如果打洞失败会使用bridge进行中转。 内网穿透增加了客户端key白名单参数--client-keys。 增加了tools工具功能,目前有:nat类型判断,方便查看网络是否支持p2p,比如:proxy tools -a nattype tcp转发,内网穿透,udp转发,tls传输模式增加了--ca参数设置用于验证证书的签发机构证书。 为了提供更...
相关文章
文章评论
共有0条评论来说两句吧...