datax oracle mysql_从 MySQL 到 Lindorm时序引擎 的数据迁移
背景
本文主要介紹如何使用阿里巴巴的開(kāi)源工具Datax 實(shí)現(xiàn)從 MySQL 到 時(shí)序引擎 的數(shù)據(jù)遷移。
DataX相關(guān)使用介紹請(qǐng)參閱 DataX 的
下面將首先介紹 DataX 工具本身,以及本次遷移工作涉及到的兩個(gè)插件(MySQL Reader 和 TSDB Writer)。
DataX
DataX 是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具 / 平臺(tái),實(shí)現(xiàn)包括 MySQL、Oracle、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS
等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。
MySQL Reader
MySQL Reader 是 DataX 的一個(gè)插件,實(shí)現(xiàn)了從 MySQL 讀取數(shù)據(jù)。
TSDB Writer
TSDB Writer 是 DataX 的一個(gè)插件,實(shí)現(xiàn)了將數(shù)據(jù)點(diǎn)寫(xiě)入到Lindorm數(shù)據(jù)庫(kù)時(shí)序引擎中。
Quick Start
環(huán)境準(zhǔn)備。
Linux
MySQL(目前只支持兼容 5.x,其他版本暫不保證兼容)
Lindorm時(shí)序引擎(目前只支持兼容 2.4.x 及以上版本,其他版本暫不保證兼容)
下載 DataX 及其插件。
點(diǎn)擊
利用 DataX 自帶的遷移任務(wù),檢查遷移流程能否走通。
這里,我們先以最簡(jiǎn)單的 Stream Reader 到 Stream Writer 為例。因?yàn)檫@兩個(gè)插件不依賴(lài)任何的外部環(huán)境,特別適合用來(lái)測(cè)試流程是否能走通。簡(jiǎn)單介紹下這兩個(gè)插件,其中
Stream Reader 會(huì)隨機(jī)地產(chǎn)生字符串,而 Stream Writer 則會(huì)將接受到的字符串輸出到控制臺(tái),以此模擬一個(gè)最簡(jiǎn)單的數(shù)據(jù)遷移過(guò)程。
工具部署
將下載后的安裝包,解壓至某個(gè)目錄(作為 DATAX_HOME),即可運(yùn)行遷移任務(wù):$ cd ${DATAX_HOME}
$ python bin/datax.py job/job.json
檢查任務(wù)是否成功
下面是任務(wù)結(jié)束后的匯總信息,看到如下內(nèi)容,即可表示遷移任務(wù)已成功完成:任務(wù)啟動(dòng)時(shí)刻 : 2019-04-26 11:18:07
任務(wù)結(jié)束時(shí)刻 : 2019-04-26 11:18:17
任務(wù)總計(jì)耗時(shí) : 10s
任務(wù)平均流量 : 253.91KB/s
記錄寫(xiě)入速度 : 10000rec/s
讀出記錄總數(shù) : 100000
讀寫(xiě)失敗總數(shù) : 0
步驟四:配置和啟動(dòng) MySQL 到 時(shí)序引擎 的遷移任務(wù)
通過(guò)上述 Stream Reader 到 Stream Writer 的遷移任務(wù),我們就可以確保整個(gè) DataX 流程是沒(méi)有問(wèn)題的。下面就可以真正開(kāi)始 MySQL
Reader 到 TSDB Writer 遷移任務(wù)了。
配置遷移任務(wù)
配置一個(gè)從 MySQL 數(shù)據(jù)庫(kù)同步抽取數(shù)據(jù)到 時(shí)序引擎 的任務(wù),命名為 mysql2tsdb.json,完整的配置信息如下(針對(duì)各個(gè)配置參數(shù)的詳細(xì)說(shuō)明,請(qǐng)看下一章節(jié)"參數(shù)說(shuō)明"):{
"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
}
}
}
}
啟動(dòng) MySQL 2 時(shí)序引擎 遷移任務(wù)$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
檢查任務(wù)是否成功
下面是任務(wù)結(jié)束后的匯總信息,看到如下內(nèi)容,即可表示遷移任務(wù)已成功完成:任務(wù)啟動(dòng)時(shí)刻 : 2019-05-21 18:25:16
任務(wù)結(jié)束時(shí)刻 : 2019-05-21 18:25:27
任務(wù)總計(jì)耗時(shí) : 11s
任務(wù)平均流量 : 3B/s
記錄寫(xiě)入速度 : 0rec/s
讀出記錄總數(shù) : 3
讀寫(xiě)失敗總數(shù) : 0
參數(shù)說(shuō)明
接下來(lái),我們來(lái)看下各個(gè)配置項(xiàng)的含義:
MySQL Reader 相關(guān)
名稱(chēng)
類(lèi)型
是否必需
描述
默認(rèn)值
舉例
jdbcUrl
String
是
數(shù)據(jù)庫(kù)的 JDBC 連接信息
無(wú)
jdbc:mysql://127.0.0.1:3306/datax
username
String
是
數(shù)據(jù)源的用戶名
無(wú)
root
password
String
是
數(shù)據(jù)源指定用戶名的密碼
無(wú)
root
table
String
是
需要同步的表
無(wú)
book
column
Array
是
表中需要同步的列名集合
[]
["m"]
splitPk
String
否
如果指定 splitPk,表示用戶希望使用 splitPk 代表的字段進(jìn)行數(shù)據(jù)分片
空
id
TSDB Writer 相關(guān)
名稱(chēng)
類(lèi)型
是否必需
描述
默認(rèn)值
舉例
sourceDbType
String
否
目前支持 時(shí)序引擎 和 RDB 兩個(gè)取值。其中,時(shí)序引擎 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS
等
TSDB
RDB
column
Array
是
表中需要同步的列名集合
[]
["name","type","create_time","price"]
columnType
Array
是
關(guān)系型數(shù)據(jù)庫(kù)中表字段,映射到 時(shí)序引擎 中的類(lèi)型。支持的類(lèi)型:timestamp:該字段是個(gè)時(shí)間戳;tag:該字段是個(gè) tag;metric_num:該 metric 的 value 是數(shù)值類(lèi)型;metric_string:該 metric 的 value 是字符串類(lèi)型
[]
["tag","tag","timestamp","metric_num"]
tsdbAddress
String
是
時(shí)序引擎 的 IP 地址
無(wú)
127.0.0.1
tsdbPort
int
是
時(shí)序引擎 的端口
無(wú)
8242
batchSize
int
否
每次批量數(shù)據(jù)的條數(shù)(需要保證大于 0)
100
100
注意事項(xiàng)
確保與 時(shí)序引擎 的網(wǎng)絡(luò)是連通的
因?yàn)?TSDB Writer 寫(xiě)入數(shù)據(jù)的方式是調(diào)用 HTTP 接口(/api/put)來(lái)完成的,所以需要確保遷移任務(wù)的進(jìn)程能正常訪問(wèn)到 時(shí)序引擎 暴露出來(lái)的 HTTP 接口的。否則,會(huì)報(bào)錯(cuò) Connect Exception 異常。
確保與 MySQL 的網(wǎng)絡(luò)是連通的
因?yàn)?MySQL Reader 讀取數(shù)據(jù)是通過(guò) JDBC 來(lái)完成的,所以需要確保遷移任務(wù)的進(jìn)程能正常訪問(wèn)到 MySQL 暴露出來(lái)的 JDBC 接口的。否則,會(huì)報(bào)錯(cuò)
Connect Exception 異常。
需要 column 字段順序保持一致
需要保證 TSDB Writer 插件中的 column 字段順序和 MySQL reader 插件中配置的 column 字段順序保持一致。否則,數(shù)據(jù)會(huì)錯(cuò)亂。
FAQ
Q:是否支持調(diào)整遷移進(jìn)程的 JVM 內(nèi)存大小?
A:支持的。以"從 MySQL 到 時(shí)序引擎 的數(shù)據(jù)遷移任務(wù)"為例,啟動(dòng)命令如下:python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Q:如何給 時(shí)序引擎 設(shè)置網(wǎng)絡(luò)白名單?
A:參考《Lindorm數(shù)據(jù)庫(kù) 時(shí)序引擎 版 > 快速入門(mén) >
Q:將遷移任務(wù)運(yùn)行在 ECS 上的用戶,如何配置 VPC,以及常見(jiàn)問(wèn)題有哪些?
總結(jié)
以上是生活随笔為你收集整理的datax oracle mysql_从 MySQL 到 Lindorm时序引擎 的数据迁移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python perl lisp,是否可
- 下一篇: mysql rr 更新失败_RR 级别下