tsdb和mysql_从 MySQL 到 TSDB 的数据迁移

tsdb和mysql_从 MySQL 到 TSDB 的数据迁移背景本文主要介绍如何使用阿里巴巴的开源工具 Datax 实现从 MySQL 到 TSDB 的数据迁移 DataX 相关使用介绍请参阅 DataX 的 README 文档 下面将首先介绍 DataX 工具本身 以及本次迁移工作涉及到的两个插件 MySQLReader 和 TSDBWriter DataXDataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 平台 实现包括 MySQL Ora

背景

本文主要介绍如何使用阿里巴巴的开源工具Datax 实现从 MySQL 到 TSDB 的数据迁移。

DataX相关使用介绍请参阅 DataX 的 README 文档。

下面将首先介绍 DataX 工具本身,以及本次迁移工作涉及到的两个插件(MySQL Reader 和 TSDB Writer)。

DataX

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台,实现包括 MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

MySQL Reader

MySQL Reader 是 DataX 的一个插件,实现了从 MySQL 读取数据。

TSDB Writer

TSDB Writer 是 DataX 的一个插件,实现了将数据点写入到阿里巴巴自研 TSDB 数据库中。

Quick Start

步骤一:环境准备Linux

JDK(1.8 以上,推荐 1.8)

Python(推荐 Python 2.6.x)

MySQL(目前只支持兼容 5.x,其他版本暂不保证兼容)

TSDB(目前只支持兼容 2.4.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-2611:18:07

任务结束时刻:2019-04-2611:18:17

任务总计耗时:10s

任务平均流量:253.91KB/s

记录写入速度:10000rec/s

读出记录总数:

读写失败总数:0

步骤四:配置和启动 MySQL 到 TSDB 的迁移任务

通过上述 Stream Reader 到 Stream Writer 的迁移任务,我们就可以确保整个 DataX 流程是没有问题的。下面就可以真正开始 MySQL Reader 到 TSDB Writer 迁移任务了。

配置迁移任务

配置一个从 MySQL 数据库同步抽取数据到 TSDB 的任务,命名为 mysql2tsdb.json,完整的配置信息如下(针对各个配置参数的详细说明,请看下一章节”参数说明”):

{

“job”:{

“content”:[

{

“reader”:{

“name”:”mysqlreader”,

“parameter”:{

“column”:[

“name”,

“type”,

“create_time”,

“price”

],

“connection”:[

{

“jdbcUrl”:[

“jdbc:mysql://127.0.0.1:3306/datax”

],

“table”:[

“book”

]

}

],

“password”:”yuzhouwan”,

“splitPk”:”id”,

“username”:”root”

}

},

“writer”:{

“name”:”tsdbwriter”,

“parameter”:{

“column”:[

“name”,

“type”,

“create_time”,

“price”

],

“columnType”:[

“tag”,

“tag”,

“timestamp”,

“metric_num”

],

“sourceDbType”:”RDB”,

“tsdbAddress”:”localhost”,

“tsdbPort”:8242

}

}

}

],

“setting”:{

“speed”:{

“channel”:1

}

}

}

}

启动 MySQL 2 TSDB 迁移任务$ cd ${DATAX_HOME}/..

$ ls

datax/datax.tar.gz mysql2tsdb.json

$ python datax/bin/datax.py mysql2tsdb.json

检查任务是否成功

下面是任务结束后的汇总信息,看到如下内容,即可表示迁移任务已成功完成:

任务启动时刻:2019-05-2118:25:16

任务结束时刻:2019-05-2118: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

TSDB Writer 相关名称

类型

是否必需

描述

默认值

举例

sourceDbType

String

目前支持 TSDB 和 RDB 两个取值。其中,TSDB 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS 等

TSDB

RDB

column

Array

表中需要同步的列名集合

[]

[“name”,”type”,”create_time”,”price”]

columnType

Array

关系型数据库中表字段,映射到 TSDB 中的类型。

支持的类型:

timestamp:该字段是个时间戳;

tag:该字段是个 tag;

metric_num:该 metric 的 value 是数值类型;

metric_string:该 metric 的 value 是字符串类型

[]

[“tag”,”tag”,”timestamp”,”metric_num”]

tsdbAddress

String

TSDB 的 IP 地址

127.0.0.1

tsdbPort

int

TSDB 的端口

8242

batchSize

int

每次批量数据的条数(需要保证大于 0)

100

100

注意事项

确保与 TSDB 的网络是连通的

因为 TSDB Writer 写入数据的方式是调用 HTTP 接口(/api/put)来完成的,所以需要确保迁移任务的进程能正常访问到 TSDB 暴露出来的 HTTP 接口的。否则,会报错 Connect Exception 异常。

确保与 MySQL 的网络是连通的

因为 MySQL Reader 读取数据是通过 JDBC 来完成的,所以需要确保迁移任务的进程能正常访问到 MySQL 暴露出来的 JDBC 接口的。否则,会报错 Connect Exception 异常。

需要 column 字段顺序保持一致

需要保证 TSDB Writer 插件中的 column 字段顺序和 MySQL reader 插件中配置的 column 字段顺序保持一致。否则,数据会错乱。

FAQ

Q:是否支持调整迁移进程的 JVM 内存大小?

A:支持的。以”从 MySQL 到 TSDB 的数据迁移任务”为例,启动命令如下:

python datax/bin/datax.py mysql2tsdb.json-j”-Xms4096m -Xmx4096m”

Q:如何给 TSDB 设置网络白名单?

A:参考《时序数据库 TSDB 版 > 快速入门 > 设置网络白名单》。

Q:将迁移任务运行在 ECS 上的用户,如何配置 VPC,以及常见问题有哪些?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223907.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:09
下一篇 2026年3月17日 下午1:09


相关推荐

  • windows实现mysql读写分离[通俗易懂]

    一、主服务器(master)配置1、修改MySQL配置文件my.ini[mysqld]log-bin=mysql-bin#开启主从复制,主库的配置log-bin-index=mysql-bin.indexserver-id=1#指定主库serverid,主库的id要比从库的id小sync_binlog=1binlog_format=mixed

    2022年4月17日
    40
  • Eureka 集群搭建「建议收藏」

    Eureka 集群搭建「建议收藏」一、Eureka高可用集群在实际的生产环境中,eureka常常是以集群的方式提供服务的,目的就是要保证高可用性,同时它还保证了分区容错性。这也满足了一个健壮的分布式系统所要求的CAP理论原则,即eureka保证了高可用性,分区容错性。二、Eureka集群原理Eureka的工作细节Eureka本身可以分为两大部分,EurekaServer和EurekaClient。2.1EurekaServerEurekaServer主要对外提供了三个功能:服务注册:所有的

    2022年6月14日
    36
  • 求逆矩阵的方法「建议收藏」

    求逆矩阵的方法「建议收藏」一般求逆矩阵的方法有两种,伴随阵法和初等变换法。但是这两种方法都不太适合编程。伴随阵法的计算量大,初等变换法又难以编程实现。适合编程的求逆矩阵的方法如下:

    2022年8月21日
    7
  • 全方位深入理解JavaScript面向对象

    全方位深入理解JavaScript面向对象JavaScript 面向对象程序设计本文会碰到的知识点 原型 原型链 函数对象 普通对象 继承读完本文 可以学到面向对象的基本概念 JavaScript 对象属性理解 JavaScript 中的函数对象与普通对象理解 prototype 和 proto 理解原型和原型链详解原型链相关的 Object 方法了解如何用 ES5 模拟类 以及各种方式的优缺点了解如何用 ES6 实现面向对象目录

    2026年3月19日
    1
  • python抛出异常会终止程序吗_catch里面抛出异常

    python抛出异常会终止程序吗_catch里面抛出异常Python抛出异常

    2022年10月18日
    5
  • 蓝桥杯单片机必备知识—–(10)DS1302时钟

    蓝桥杯单片机必备知识—–(10)DS1302时钟

    2021年4月13日
    201

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号