從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 | 資料源的使用者名 | root | |||
password | 資料源指定使用者名的密碼 | ||||
table | 需要同步的表 | book | |||
column | Array | 表中需要同步的列名集合 | [] | ["m"] | |
splitPk | 否 | 如果指定 splitPk,表示使用者希望使用 splitPk 代表的字段進行資料分片 | 空 | id |
InfluxDB Writer 相關
sourceDbType | 目前支援 TSDB 和 RDB 兩個取值。其中,TSDB 指 OpenTSDB、InfluxDB、Prometheus、TimeScale 等;而 RDB 指 MySQL、Oracle、PostgreSQL、DRDS 等 | TSDB | RDB | ||
["host","unit","create_time","cpu","memory"] | |||||
columnType | 關系型資料庫中表字段,映射到 InfluxDB 中的類型。 支援的類型: timestamp:該字段是個時間戳; tag:該字段是個 tag; field:該字段代表具體的采集的名額值,其value預設是數值類型(存儲為浮點類型); number_field:字段代表具體采集的名額值,其value類型為數值類型(存儲為浮點類型),string_field: 該字段代表采集的名額值為字元串類型。 | ["tag","tag","timestamp","field","number_field","string_field"] | |||
endPoint | InfluxDB的網絡位址 | https://ts-xxxxx.influxdata.rds.aliyuncs.com:3242 | |||
InfluxDB使用者名 | test | ||||
InfluxDB使用者密碼 | |||||
database | 導入InfluxDB的資料庫名稱 | datax | |||
measurement | 寫入influxdb的measurement的名稱 | machine | |||
createDatabase | bool | true: 會自動建立資料庫 ; false: 不會自動建立資料庫。(支援該參數的設定,但未出現在示例中) | false | ||
batchSize | int | 每次批量資料的條數(需要保證大于 0, 支援該參數的設定,但未出現在示例中) | 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 常見問題》。