datax oracle mysql_从 MySQL 到 Lindorm时序引擎 的数据迁移
背景
本文主要介紹如何使用阿里巴巴的開源工具Datax 實現從 MySQL 到 時序引擎 的數據遷移。
DataX相關使用介紹請參閱 DataX 的
下面將首先介紹 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 的一個插件,實現了將數據點寫入到Lindorm數據庫時序引擎中。
Quick Start
環境準備。
Linux
MySQL(目前只支持兼容 5.x,其他版本暫不保證兼容)
Lindorm時序引擎(目前只支持兼容 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-26 11:18:07
任務結束時刻 : 2019-04-26 11:18:17
任務總計耗時 : 10s
任務平均流量 : 253.91KB/s
記錄寫入速度 : 10000rec/s
讀出記錄總數 : 100000
讀寫失敗總數 : 0
步驟四:配置和啟動 MySQL 到 時序引擎 的遷移任務
通過上述 Stream Reader 到 Stream Writer 的遷移任務,我們就可以確保整個 DataX 流程是沒有問題的。下面就可以真正開始 MySQL
Reader 到 TSDB Writer 遷移任務了。
配置遷移任務
配置一個從 MySQL 數據庫同步抽取數據到 時序引擎 的任務,命名為 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 時序引擎 遷移任務$ cd ${DATAX_HOME}/..
$ ls
datax/ datax.tar.gz mysql2tsdb.json
$ python datax/bin/datax.py mysql2tsdb.json
檢查任務是否成功
下面是任務結束后的匯總信息,看到如下內容,即可表示遷移任務已成功完成:任務啟動時刻 : 2019-05-21 18:25:16
任務結束時刻 : 2019-05-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
TSDB Writer 相關
名稱
類型
是否必需
描述
默認值
舉例
sourceDbType
String
否
目前支持 時序引擎 和 RDB 兩個取值。其中,時序引擎 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS
等
TSDB
RDB
column
Array
是
表中需要同步的列名集合
[]
["name","type","create_time","price"]
columnType
Array
是
關系型數據庫中表字段,映射到 時序引擎 中的類型。支持的類型:timestamp:該字段是個時間戳;tag:該字段是個 tag;metric_num:該 metric 的 value 是數值類型;metric_string:該 metric 的 value 是字符串類型
[]
["tag","tag","timestamp","metric_num"]
tsdbAddress
String
是
時序引擎 的 IP 地址
無
127.0.0.1
tsdbPort
int
是
時序引擎 的端口
無
8242
batchSize
int
否
每次批量數據的條數(需要保證大于 0)
100
100
注意事項
確保與 時序引擎 的網絡是連通的
因為 TSDB Writer 寫入數據的方式是調用 HTTP 接口(/api/put)來完成的,所以需要確保遷移任務的進程能正常訪問到 時序引擎 暴露出來的 HTTP 接口的。否則,會報錯 Connect Exception 異常。
確保與 MySQL 的網絡是連通的
因為 MySQL Reader 讀取數據是通過 JDBC 來完成的,所以需要確保遷移任務的進程能正常訪問到 MySQL 暴露出來的 JDBC 接口的。否則,會報錯
Connect Exception 異常。
需要 column 字段順序保持一致
需要保證 TSDB Writer 插件中的 column 字段順序和 MySQL reader 插件中配置的 column 字段順序保持一致。否則,數據會錯亂。
FAQ
Q:是否支持調整遷移進程的 JVM 內存大小?
A:支持的。以"從 MySQL 到 時序引擎 的數據遷移任務"為例,啟動命令如下:python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Q:如何給 時序引擎 設置網絡白名單?
A:參考《Lindorm數據庫 時序引擎 版 > 快速入門 >
Q:將遷移任務運行在 ECS 上的用戶,如何配置 VPC,以及常見問題有哪些?
總結
以上是生活随笔為你收集整理的datax oracle mysql_从 MySQL 到 Lindorm时序引擎 的数据迁移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python perl lisp,是否可
- 下一篇: python转cpp_python转c工