天天看點

從Mysql到阿裡雲時序資料庫InfluxDB的資料遷移從Mysql 到 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 資料源的使用者名 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 常見問題》。