从Mysql到阿里云时序数据库InfluxDB的数据迁移

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 作为阿里在APM和IOT领域的重要布局,时序数据库承载着阿里对于物理网和未来应用监控市场的未来和排头兵,作为业内排名第一的时序数据库InfluxDB,其在国内和国际都拥有了大量的用户,阿里适逢其时,重磅推出了阿里云 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://127.0.0.1:3306/datax"
                ],
                "table": [
                  "machine"
                ]
              }
            ],
            "password": "test",
            "splitPk": "id",
            "username": "test"
          }
        },
        "writer": {
          "name": "influxdbwriter",
          "parameter": {
            "column": [
              "host",
              "unit",
              "create_time",
              "cpu",
              "memory"
            ],
            "columnType": [
              "tag",
              "tag",
              "timestamp",
              "field",
              "field"
            ],
            "sourceDbType": "RDB",
            "endpoint": "https://ts-xxxxx.influxdata.rds.aliyuncs.com:3242",
            "username": "test",
            "password": "test",
            "database": "datax",
            "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默认是数值类型(存储为浮点类型); number_field:字段代表具体采集的指标值,其value类型为数值类型(存储为浮点类型),string_field: 该字段代表采集的指标值为字符串类型。 [] ["tag","tag","timestamp","field","number_field","string_field"]
endPoint String InfluxDB的网络地址 https://ts-xxxxx.influxdata.rds.aliyuncs.com:3242
username String InfluxDB用户名 test
password String InfluxDB用户密码 test
database String 导入InfluxDB的数据库名称 datax
measurement String 写入influxdb的measurement的名称 machine
createDatabase bool true: 会自动创建数据库 ; false: 不会自动创建数据库。(支持该参数的设置,但未出现在示例中) false false
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 常见问题》。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
161 1
|
26天前
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
2月前
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
118 18
|
2月前
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
2月前
|
人工智能 关系型数据库 分布式数据库
媒体声音|从亚太到欧美,阿里云瑶池数据库凭何成为中企出海的技术底气?
在中企出海的时代浪潮中,瑶池数据库正凭借其技术创新、场景化解决方案、智能化能力、全球化布局,成为企业跨越挑战、构建全球竞争力的关键伙伴;同时也以硬核的技术实力证明了中国数据库的国际竞争力。
|
2月前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
80 9
|
2月前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
164 5
|
2月前
|
安全 Apache 数据库
【倒计时3天】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!
5月24日,NineData联合Apache Doris与阿里云在深圳举办数据库技术Meetup。活动聚焦「数据实时分析」与「数据同步迁移」两大领域,邀请行业专家分享技术趋势、产品实践及解决方案,助力企业构建高效安全的数据管理体系。时间:14:00-17:30;地点:深圳新一代产业园2栋20楼会议室。线下名额有限(80人),速报名参与深度交流!
68 1
|
2月前
|
SQL 关系型数据库 MySQL
阿里云《快速连接云数据库RDS》训练营,火热开营中!
快速连接云数据库 RDS 训练营开营啦!从 0 到 1 学习实战技能,涵盖 RDS MySQL 快速连接、DMS 数据管理及 SQL 实战案例。完成任务赢取专业飞盘、积木等好礼(限量 100 份)
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
281 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用

推荐镜像

更多