文档下载建议反馈入口

  • 配置示例
  • 数据类型映射

从 MySQL 迁移到 KaiwuDB

本节介绍了如何将 MySQL 数据迁移到 KaiwuDB,涵盖配置示例和数据类型映射关系。

提示

KaiwuDB 时序表的第一列必须是时间戳列,且必须设置主标签列。迁移 MySQL 数据的元数据到时序库时,KaiwuDB 会自动为表添加 ts 时间戳列作为第一列,添加 tb_name_tag 标签列作为主标签列。

手动创建时序表迁移 MySQL 数据时,需要用户自行指定时间戳列和主标签列。

配置示例

本节提供了以下常见的迁移配置示例:

单库迁移元数据

前提条件

  • 完成迁移准备
  • 在 MySQL 数据库中创建 mysql_kaiwudb 数据库和待迁移的表。
  • 在 KaiwuDB 数据库中创建 mysql_kaiwudb 关系库。

说明

  • 目标数据库的库名必须与源数据库的库名相同。
  • 如果登录 KaiwuDB 数据库的用户为 admin 用户或 admin 角色的成员,则无需提前建库,KaiwuDB 将自动创建与源数据库同名的数据库。

步骤

  1. 解压缩 KaiwuDB DataX 插件包,将解压后的 kaiwudbwriter 复制到 datax/plugin/writer 目录。

  2. 创建 .yml 格式的迁移配置文件,配置元数据、源数据库和目标数据库。有关配置参数的详细信息,参见配置参数

    metadata:
      enable: true               # 启用元数据迁移
      engine-type: RELATIONAL    # 引擎类型为关系引擎
      auto-ddl: true             # 自动创建表
      primary-key: true          # 启用主键迁移
      constraint: true           # 启用约束迁移
      comment: true              # 启用注释迁移
      index: true                # 启用索引迁移
      view: true                 # 启用视图迁移
    source:
      type: MYSQL                # 源数据库是 MySQL
      host: 192.168.122.67       # MySQL 数据库主机地址
      port: 3306                 # MySQL 数据库端口
      username: <username>       # MySQL 数据库用户名
      password: <password>       # MySQL 数据库密码
      databases:
        - name: mysql_kaiwudb    # 源数据库名
    target:
      type: KAIWUDB              # 目标数据库是 KaiwuDB
      host: 127.0.0.1            # KaiwuDB 数据库主机地址
      port: 26257                # KaiwuDB 数据库端口
      username: <username>       # KaiwuDB 数据库用户名
      password: <password>       # KaiwuDB 数据库密码
      databases:
        - name: mysql_kaiwudb    # 目标数据库名                    
    
  3. kaiwudb-datax-utils-2.2.0.jar 所在目录,执行以下命令,开始迁移表元数据。有关迁移命令支持的所有参数,参见迁移命令参数

    java -jar -DyamlPath=../mysql2kaiwudb.yml kaiwudb-datax-utils-2.2.0.jar
    

    结果示例:

    2025-01-03 01:29:10 INFO c.k.migration.KaiwuDBApplication - Initialize heterogeneous database migration tool.
    2025-01-03 01:29:10 INFO c.k.migration.KaiwuDBApplication - config file: mysql2kaiwudb.yml
    2025-01-03 01:29:11 INFO c.k.m.s.impl.MigrationServiceImpl - The source database mysql_kaiwudb structure definition is complete.
    2025-01-03 01:29:11 INFO c.k.m.s.impl.MigrationServiceImpl - Target database table column type conversion is complete.
    2025-01-03 01:29:13 INFO c.k.migration.utils.SqlFileHelper - The SQL for data structure migration is successfully generated. File path: [/home/inspur/src/gitee.com/2.2metadata/datax/bin/../datax/sql/MYSQL2KAIWUDB_20250103012913366.sql]
    

单库迁移元数据和业务数据

前提条件

  • 完成迁移准备
  • 在 MySQL 数据库中创建 mysql_kaiwudb 数据库和待迁移的表。
  • 在 KaiwuDB 数据库中创建 mysql_kaiwudb 关系库。

说明

  • 目标数据库的库名必须与源数据库的库名相同。
  • 如果登录 KaiwuDB 数据库的用户为 admin 用户或 admin 角色的成员,则无需提前建库,KaiwuDB 将自动创建与源数据库同名的关系库。

步骤

  1. 解压缩 KaiwuDB DataX 插件包,将解压后的 kaiwudbwriter 复制到 datax/plugin/writer 目录。

  2. 创建 .yml 格式的迁移配置文件,配置元数据、业务数据、源数据库和目标数据库。有关配置参数的详细信息,参见配置参数

    metadata:
      enable: true               # 启用元数据迁移
      engine-type: RELATIONAL    # 引擎类型为关系引擎
      auto-ddl: true             # 自动创建表
      primary-key: true          # 启用主键迁移
      constraint: true           # 启用约束迁移
      comment: true              # 启用注释迁移
      index: true                # 启用索引迁移
      view: true                 # 启用视图迁移
    data:
      enable: true               # 启用业务数据迁移
      batchSize: 1000            # 每批次迁移 1000 条数据
      setting:
        speed:
          channel: 1             # 设置通道数为 1
        errorLimit:
          percentage: 0.02       # 允许错误数据的比例为 2%
      core:
        transport:
          channel:
            speed:
              byte: 1048576      # 每个通道的传输速率为 1 MB
              record: 1000       # 每个通道每批次传输 1000 条记录
    source:
      type: MYSQL                # 源数据库类型是 MySQL
      url: jdbc:mysql://127.0.0.1:3306/mysql_kaiwudb?useSSL=false&useUnicode=true&characterEncoding=utf8  # MySQL 连接 URL
      username: <username>       # MySQL 数据库用户名
      password: <password>       # MySQL 数据库密码
      databases:
        - name: mysql_kaiwudb    # 源数据库名
    target:
      type: KAIWUDB              # 目标数据库是 KaiwuDB
      url: jdbc:kaiwudb://127.0.0.1:26257/mysql_kaiwudb  # KaiwuDB 连接 URL
      username: <username>       # KaiwuDB 数据库用户名
      password: <password>       # KaiwuDB 数据库密码
      databases:
        - name: mysql_kaiwudb    # 目标数据库名
            
    
  3. kaiwudb-datax-utils-2.2.0.jar 所在目录,执行以下命令,开始迁移表元数据和业务数据。有关迁移命令支持的所有参数,参见迁移命令参数

    java -jar -DyamlPath=../mysql2kaiwudb.yml -DdataxPath=../datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar
    

单表迁移元数据

前提条件

  • 完成迁移准备
  • 在 MySQL 数据库中创建 mysql_kaiwudb 数据库和待迁移的表。
  • 在 KaiwuDB 数据库中创建 mysql_kaiwudb 时序库。

步骤

  1. 解压缩 KaiwuDB DataX 插件包,将解压后的 kaiwudbwriter 复制到 datax/plugin/writer 目录。

  2. 创建 .yml 格式的迁移配置文件,配置元数据、源数据库和目标数据库的连接信息。有关配置参数的详细信息,参见配置参数

    metadata:
      enable: true               # 启用元数据迁移
      engine-type: TIMESERIES    # 引擎类型为时序引擎
      auto-ddl: true             # 自动创建表
      primary-key: false         # 不启用主键迁移
      constraint: false          # 不启用约束迁移
      comment: true              # 启用注释迁移
      index: false               # 不启用索引迁移
      view: false                # 不启用视图迁移
    source:
      type: MYSQL                # 源数据库类型是 MySQL
      url: jdbc:mysql://127.0.0.1:3306/mysql_kaiwudb?useSSL=false&useUnicode=true&characterEncoding=utf8  # MySQL 数据库连接 URL
      username: <username>       # MySQL 数据库的用户名
      password: <password>       # MySQL 数据库的密码
      databases:
        - name: mysql_kaiwudb    # 源数据库名
          tables:
            - name: table_name             # 需要迁移的表名
    target:
      type: KAIWUDB              # 目标数据库类型为 KaiwuDB
      url: jdbc:kaiwudb://127.0.0.1:26257/mysql_kaiwudb  # KaiwuDB 数据库连接 URL
      username: <username>       # KaiwuDB 数据库的用户名
      password: <password>       # KaiwuDB 数据库的密码
      databases:
        - name: mysql_kaiwudb    # 目标数据库名
          tables:
            - name: table_name   # 目标表名         
    
  3. kaiwudb-datax-utils-2.2.0.jar 所在目录,执行以下命令,开始迁移表元数据。有关迁移命令支持的所有参数,参见迁移命令参数

    java -jar -DyamlPath=../mysql2kaiwudb.yml -DdataxPath=../datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar
    

多表迁移指定范围业务数据

前提条件

  • 完成迁移准备
  • 在 MySQL 数据库中创建 mysql_kaiwudb 数据库和待迁移的表。
  • 在 KaiwuDB 数据库中创建 mysql_kaiwudb 时序库。

步骤

  1. 解压缩 KaiwuDB DataX 插件包,将解压后的 kaiwudbwriter 复制到 datax/plugin/writer 目录。

  2. 创建 .yml 格式的迁移配置文件,配置业务数据、源数据库和目标数据库。有关配置参数的详细信息,参见配置参数

    data:
      enable: true          # 启用业务数据迁移
      batchSize: 1000       # 每批次迁移的记录条数为 1000 条
      setting:
        speed:
          channel: 1        # 迁移通道的数量为 1,表示单通道迁移
        errorLimit:
          percentage: 0.02  # 最大错误率为 2%,超过此比例将停止迁移
      core:
        transport:
          channel:
            speed:
              byte: 1048576 # 每个传输通道的数据传输速度为 1 MB(1048576 字节)
              record: 1000  # 每次迁移 1000 条记录
    source:
      type: MYSQL           # 源数据库为 MySQL
      url: jdbc:mysql://127.0.0.1:3306/mysql_kaiwudb?useSSL=false&useUnicode=true&characterEncoding=utf8  # MySQL 数据库连接 URL
      username: <username>  # MySQL 数据库用户名
      password: <password>  # MySQL 数据库密码
      databases:
        - name: mysql_kaiwudb  # 源数据库名
          tables:
            - name: table_1    # 迁移的第一张表
              column: ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,1 as t1  # 要迁移的列,指定 1 为主标签列 t1
              where: ts >= '2024-08-01 00:00:00' and ts <= '2024-09-01 00:00:00'  # 数据迁移条件,指定时间范围
            - name: table_2    # 迁移的第二张表
              querySql:
                - select ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,1 as t1 from table_2 where ts >= '2024-08-01 00:00:00' and ts <= '2024-09-01 00:00:00'  # 自定义 SQL 语句,指定数据的迁移范围,指定 1 为主标签列 t1。
    
    target:
      type: KAIWUDB         # 目标数据库为 KaiwuDB
      url: jdbc:kaiwudb://127.0.0.1:26257/mysql_kaiwudb  # KaiwuDB 数据库连接 URL
      username: <username>  # KaiwuDB 数据库用户名
      password: <password>  # KaiwuDB 数据库密码
      databases:
        - name: mysql_kaiwudb  # 目标数据库名称
          tables:
            - name: table_1    # 目标数据库中要迁移的第一张表
              column: ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1  # 要迁移的列
              preSql:
                - create table table_1 (ts timestamptz not null, c1 smallint, c2 int, c3 bigint, c4 float4, c5 float8, c6 bool, c7 char(1), c8 nchar(10), c9 varchar(10), c10 nvarchar(10), c11 varbytes(10), c12 timestamptz) tags (t1 int not null) primary tags (t1)  # 在迁移数据前先创建表结构,表结构包含列定义和标签定义
            - name: table_2    # 目标数据库中要迁移的第二张表
              column: ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1  # 要迁移的列
              preSql:
                - create table table_2 (ts timestamptz not null, c1 smallint, c2 int, c3 bigint, c4 float4, c5 float8, c6 bool, c7 char(1), c8 nchar(10), c9 varchar(10), c10 nvarchar(10), c11 varbytes(10), c12 timestamptz) tags (t1 int not null) primary tags (t1)  # 在迁移数据前先创建表结构,表结构包含列定义和标签定义          
    
  3. kaiwudb-datax-utils-2.2.0.jar 所在目录,执行以下命令,开始迁移表元数据和业务数据。有关迁移命令支持的所有参数,参见迁移命令参数

    java -jar -DyamlPath=../mysql2kaiwudb.yml -DdataxPath=../datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar
    

数据类型映射

MySQL 到 KaiwuDB 表结构迁移字段和标签数据类型映射关系如下:

MySQLKaiwuDB 关系数据KaiwuDB 时序数据
BOOLEANBOOLBOOL
TINYINT(1)BOOLBOOL
TINYINTINT2INT2
SMALLINTINT2INT2
INTINT4INT4
MEDIUMINTINT4INT4
TINYINT UNSIGNEDINT2INT2
SMALLINT UNSIGNEDINT4INT4
MEDIUMINT UNSIGNEDINT4INT4
INT UNSIGNEDINT8INT8
BIGINT UNSIGNEDNUMERIC(20)INT8
BIGINTINT8INT8
DECIMALDECIMALFLOAT8
DOUBLEFLOAT8FLOAT8
FLOATFLOAT4FLOAT4
DATETIMESTAMPTIMESTAMP
DATETIMETIMESTAMPTIMESTAMP
TIMESTAMPTIMESTAMPTIMESTAMP
TIMETIMETIMESTAMP
CHARCHARCHAR
VARCHARVARCHARVARCHAR
BINARYBYTEAVARBYTES
VARBINARYVARBYTESVARBYTES
LONG VARBINARYVARBYTESVARBYTES
BLOBBYTESVARBYTES
MEDIUMBLOBBYTESVARBYTES
LONGBLOBBYTESVARBYTES
POLYGONPOLYGONVARCHAR
YEARVARCHARVARCHAR
MONTHVARCHARVARCHAR
DAYVARCHARVARCHAR
TINYTEXTTEXTNVARCHAR
TEXTTEXTNVARCHAR
MEDIUMTEXTTEXTNVARCHAR
LONGTEXTTEXTNVARCHAR
JSONJSONNVARCHAR