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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 作为阿里在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 常见问题》。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
71 15
|
2天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
9天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
13天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
12天前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
39 1
|
21天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
36 1
|
29天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
158 0
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
45 4
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
70 3
Mysql(4)—数据库索引