原文链接:【KWDB 2025 创作者计划】_MySQL整库迁移至KaiwuDB_ITPUB博客
作者:董小姐yyds
将MySQL中dataexchange库迁移到KaiwuDB中,源库和目标库详细信息如下:
作系统版本 | 数据库版本 | IP 地址 | 端口 | 数据量大小 | |
源库 | Centos7.9 x86_64 | MySQL8.0.35 版本 | 192.168.40.122 | 2214 | 5.77兆字节(MB) |
目标库 | 麒麟V10SP32403 | 开物DB2.2.0 | 192.168.40.115 | 26257 | - |
DataXopen in new window 是一款广泛使用的 离线数据同步工具 。KaiwuDB 基于 DataX 开发了数据库迁移工具 KaiwuDB DataX Utils,实现 KaiwuDB (2.0.3 及以上版本) 与 MySQL、TDengine、MongoDB、InfluxDB、OpenTSDB、Oracle、PostgreSQL、ClickHouse、KaiwuDB(1.2.x)、KaiwuDB(2.x) 等数据库的离线数据同步。
用户通过配置文件设置源数据库和目标数据库的连接、数据迁移等信息。KaiwuDB DataX Utils 自动校验、统计迁移数据并输出迁移报告。在迁移过程中,用户可以查看整体的数据迁移进度。
KaiwuDB DataX Utils 支持以下数据迁移形式:
元数据迁移 : 无需在目标数据库创建待迁移的表 ,KaiwuDB DataX Utils 将自动读取源数据库的表结构信息,生成相应的 建表语句 ,并创建符合目标数据库要求的表结构。
以库的形式迁移目前只支持将 MySQL 数据迁移到 KaiwuDB 的关系库 。迁移时, 源数据库与目标数据库必须一一对应 。
下表列出了 KaiwuDB 支持迁移的异构源数据库和数据迁移方式。
源数据库 | 目标数据库 | 元数据 | 元数据 + 业务数据 | 业务数据 |
KaiwuDB 关系库 | 表、库 | 表、库 | 表、库 | |
KaiwuDB 时序库 | 表、库 | 表 | 表 | |
KaiwuDB 关系库 | 表、库 | 表 | 表 | |
KaiwuDB 时序库 | 表、库 | 表 | 表 | |
KaiwuDB 时序库 | 表、库 | 表 | 表 | |
KaiwuDB 时序库 | 表、库 | 表 | 表 | |
MongoDB 数据库 | KaiwuDB 关系库 | - | - | 表 |
神谕 | KaiwuDB 关系库 | - | - | 表 |
OpenTSDB | KaiwuDB 时序库 | - | - | 表 |
点击屋 | KaiwuDB 关系库 | - | - | 表 |
说明
默认情况下,KaiwuDB 1.2.x 允许重复写入数据且不进行去重。KaiwuDB 2.x 对带有相同时间戳的数据整行去重 ,后写入的数据覆盖已存在的带有相同时间戳的数据。当将数据从 KaiwuDB 1.2.x 迁移到 KaiwuDB 2.x 时,如需保留源数据库中带有相同时间戳的数据,用户可以在目标数据库上运行 命令,允许写入带有相同时间戳的数据。 取值只适用于 KaiwuDB 2.x 单机部署模式。 SET CLUSTER SETTING ts.dedup.rule = keep;
keep
KaiwuDB DataX Utils 支持 DataX 的数据类型。DataX 数据类型与 KaiwuDB 数据类型的映射关系如下表所示:
DataX 数据类型 | KaiwuDB 数据类型 |
INT 系列 | TINYINT、SMALLINT、INT |
长 | TINYINT、SMALLINT、INT、BIGINT、TIMESTAMP、TIMESTAMPTZ |
双 | 浮点数、实数、双精度、十进制 |
布尔 | 布尔、比特 |
日期 | 日期、时间、时间戳、时间戳 |
字节 | 字节、VARBYTES |
字符串 | char、NCHAR、VARCHAR、NVARCHAR、TIMESTAMP、TIMESTAMPTZ |
需是Linux 系统环境
默认已安装,查看openJDK版本,需 1.8 及以上版本, 建议使用 1.8 版本
[root@localhost ~]# java -version openjdk version "1.8.0_402" OpenJDK Runtime Environment Bisheng (build 1.8.0_402-b06) OpenJDK 64-Bit Server VM Bisheng (build 25.402-b06, mixed mode)
参考链接: https://openjdk.org/install/
默认已安装,查看python版本,需 2.x 或 3.x版本
[root@localhost ~]# python -V Python 2.7.18
Python下载链接: https://www.python.org/downloads/
查看Maven版本,需 3.6 及以上版本
tar -xvf apache-maven-3.9.9-bin.tar.gz -C /usr/local/ echo "PATH=$PATH:/usr/local/apache-maven-3.9.9/bin" >> /etc/profile source /etc/profile mvn -version 或 mvn -v
参考链接: https://maven.apache.org/install.html
Maven下载链接: https://maven.apache.org/download.cgi
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。
DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
下载地址: https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
下载后解压至本地某个目录,进入bin目录,即可运行同步作业
mkdir -p /opt/datax tar -xvf datax.tar.gz -C /opt/datax echo "$PATH=$PATH:/opt/datax/datax/bin" >> /etc/profile source /etc/profile
参考链接: https://gitee.com/mirrors/DataX/blob/master/userGuid.md
下载地址: https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0
show create database `dataexchange`; +--------------+----------------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +--------------+----------------------------------------------------------------------------------------------------------------------------------------+ | dataexchange | CREATE DATABASE `dataexchange` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +--------------+----------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) root@localhost :mysql 10:52:33>select * FROM INFORMATION_SCHEMA.SCHEMATA; +--------------+--------------------+----------------------------+------------------------+----------+--------------------+ | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION | +--------------+--------------------+----------------------------+------------------------+----------+--------------------+ | def | mysql | utf8mb4 | utf8mb4_general_ci | NULL | NO | | def | information_schema | utf8mb3 | utf8mb3_general_ci | NULL | NO | | def | performance_schema | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO | | def | sys | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO | | def | dataexchange | utf8mb4 | utf8mb4_general_ci | NULL | NO | +--------------+--------------------+----------------------------+------------------------+----------+--------------------+ 5 rows in set (0.00 sec) select * FROM db; Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv % dataexchange root Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y --查看dataexchange库容量大小 select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='dataexchange'; +--------------+-----------+------------------+------------------+ | 数据库 | 记录数 | 数据容量(MB) | 索引容量(MB) | +--------------+-----------+------------------+------------------+ | dataexchange | 55578 | 5.09 | 0.67 | +--------------+-----------+------------------+------------------+ 1 row in set (0.00 sec)
--root用户连接 KaiwuDB kwbase sql --insecure --host=192.168.40.115 --创建数据库 create database dataexchange;
说明
说明
preSql[]
解压缩 KaiwuDB DataX 插件包,将解压后的 复制到 目录。 kaiwudbwriter
datax/plugin/writer
unzip KaiwuDB_datax-2.2.0.zip cp -r kaiwudbwriter /opt/datax/datax/plugin/writer/
.yml
创建 格式的迁移配置文件,配置元数据、源数据库和目标数据库。有关配置参数的详细信息,参见 配置参数 。 .yml
cat mysql2kaiwudb.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://192.168.40.122:2214/dataexchange?useSSL=false&useUnicode=true&characterEncoding=utf8 # MySQL 连接 URL username: root # MySQL 数据库用户名 password: mysql # MySQL 数据库密码 databases: - name: dataexchange # 源数据库名 target: type: KAIWUDB # 目标数据库是 KaiwuDB url: jdbc:kaiwudb://192.168.40.115:26257/dataexchange # KaiwuDB 连接 URL username: root # KaiwuDB 数据库用户名 password: 61608Hhd820. # KaiwuDB 数据库密码 databases: - name: dataexchange # 目标数据库名
在 所在目录,执行以下命令,开始迁移表元数据和业务数据。有关迁移命令支持的所有参数,参见 迁移命令参数 。 kaiwudb-datax-utils-2.2.0.jar
注意:默认会迁移到public模式下。
nohup java -jar -DyamlPath=/opt/datax/mysql2kaiwudb.yml -DdataxPath=/opt/datax/datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar &
查看迁移过程日志:
[root@localhost datax]# tail -300f nohup.out 2025-04-09 14:34:59 INFO c.k.migration.KaiwuDBApplication - Initialize heterogeneous database migration tool. 2025-04-09 14:35:00 INFO c.k.migration.utils.YamlParseHelper - config file: /opt/datax/mysql2kaiwudb.yml 2025-04-09 14:35:01 INFO c.k.m.s.impl.MigrationServiceImpl - The source database dataexchange structure definition is complete. 2025-04-09 14:35:01 INFO c.k.m.s.impl.MigrationServiceImpl - Target database table column type conversion is complete. 2025-04-09 14:35:12 INFO c.k.migration.utils.SqlFileHelper - The SQL for data structure migration is successfully generated. File path: [/opt/datax/sql/MYSQL2KAIWUDB_20250409143512330.sql] 2025-04-09 14:35:12 INFO c.k.m.s.impl.MigrationServiceImpl - Target database structure construct is complete. 2025-04-09 14:35:25 INFO c.kaiwudb.migration.utils.CmdHelper - 执行命令成功: [python, /opt/datax/datax/bin/datax.py, /opt/datax/datax/job/MYSQL2KAIWUDB_19620197983539.json] ...... 2025-04-09 14:49:17 INFO c.kaiwudb.migration.utils.CmdHelper - 执行命令成功: [python, /opt/datax/datax/bin/datax.py, /opt/datax/datax/job/MYSQL2KAIWUDB_19620292281809.json] 2025-04-09 14:49:19 INFO c.k.m.s.impl.MigrationServiceImpl - 生成DataX迁移脚本,并执行脚本完成数据迁移同步,迁移报告路径为:/opt/datax/datax/log/迁移报告_20250409144917000877.pdf.
最次迁移结束。
源数据库是 MySQL、PostgreSQL、TDengine 或 InfluxDB 且目标数据库是 KaiwuDB,用户可以使用迁移工具迁移表结构数据,无需提前创建目标表 。
目标数据库的库名必须与源数据库的库名相同。
如果登录 KaiwuDB 数据库的用户为 用户或 角色的成员,则无需提前建库,KaiwuDB 将自动创建与源数据库同名的数据库。 admin
admin
迁移任务目录:-dataxPath启动参数指定目录下的job目录,以.json为后缀
迁移日志路径:-dataxPath启动参数指定目录下的log目录,以日期生成独立目录
迁移报告路径:-dataxPath启动参数指定,该迁移案例中迁移报告文件路径/opt/datax/datax/log/迁移报告_20250409144917000877.pdf
如果要避免内存溢出或增加datax内存提高迁移速度,可更改conf中的core.json中的jvm参数
{ "entry": { "jvm": "-Xms1G -Xmx1G", "environment": {} },
参数 | 说明 |
| 可选字段,控制是否迁移元数据,设置为 时迁移元数据; 设置为 时不迁移元数据。默认值为 。 |
| 指定目的端引擎类型。支持 (关系引擎)或 (时序引擎)。元数据迁移时为必选字段。 |
| 控制是否自动执行 DDL 建表语句,设置为 时,KaiwuDB 根据元数据自动在目标数据库中创建表,并将转换后的建表语句打印到指定 SQL 文件中。文件存储路径通过 启动参数指定。设置为 时,KaiwuDB 将输出转换后的建表语句,不执行建表作。元数据迁移时为必选字段。 |
| 控制生成的 DDL 语句中是否包含主键创建语句。设置为 时包含。设置为 时不包含。该参数 只适用于关系数据的迁移。 |
| 控制生成的 DDL 语句中是否包含约束创建语句。设置为 时包含。设置为 时不包含。 该参数只适用于关系数据的迁移。 |
| 控制生成的 DDL 语句中是否包含注释创建语句。设置为 时包含。设置为 时不包含。 |
| 控制生成的 DDL 语句中是否包含索引创建语句。设置为 时包含。设置为 时不包含。 |
| 控制生成的 DDL 语句中是否包含视图创建语句。设置为 时包含。设置为 时不包含。 该参数只适用于关系数据的迁移。 |
参数 | 说明 |
| 可选字段,控制是否迁移业务数据,设置为 时迁移业务数据。设置为 时不迁移业务数据。默认值为 。 |
| 可选字段。源端数据库为 InfluxDB 时,指定读取数据的超时时间。默认值为 ,表示 10 秒。支持配置大于 10 的数值。 |
| 可选字段。单次读取数据的条数,默认值为 。 |
| 可选字段。批量写入的数据条数。默认值为 。 |
| 可选字段,源端数据库为 TDengine 时,控制是否忽略不匹配的标签,支持设置为 (忽略)或 (不忽略)。 |
| 可选字段。迁移通道的数量。 |
| 可选字段。迁移通道速度。如果单通道速度为 1 MB,设置为 时, 表示一个通道。 |
| 可选字段。传输的记录数量。 |
| 可选字段。出错限制百分比。设置为 时,表示 100%。 |
| 可选字段。发生错误的记录数量,定义错误发生时抛出异常的时机。设置为 时,表示报错后立即抛出异常,任务失败。 |
| 可选字段。读写数据时允许出现的错误所占的字节数的上限。 |
| 可选字段。通道速度。 |
| 可选字段。读取的记录数量。 |
参数 | 说明 |
| 必选字段。指定源端数据库类型,支持 、 、 、 、 、 、 、 、 、 和 )。 |
| 指定连接到源数据库的 URL。部分源数据库中,该参数用作 的值。使用 时,无需再指定 和 。 |
| 指定源端数据库的 IP 地址。仅在未使用 参数时需要配置。 |
| 指定源端数据库的端口号。仅在未使用 参数时需要配置。 |
| 必选字段。源数据库的用户名,InfluxDB 2.X 中,该参数用作 的值。 |
| 必选字段。源数据库的用户密码,密码不得为空,InfluxDB 2.X 中,该参数用作 的值。 |
| 源端数据库名称,大小写敏感,InfluxDB2.X 中会用作 的值。 |
| 待读取数据的表名,例如 。指定后系统将只读取该表,未指定时,系统将读取数据库下的全部表数据。InfluxDB 中,该参数用作 的值。MongoDB 中,该参数用作 的值。 |
| 待读取数据的表的列。可配置为使用逗号( )隔开的字符串或 Json 字符串。 |
| 自定义 SQL 查询语句集合。可使用 或 参数限定数据读取范围。如果同时设置 和 ,系统将优先使用 参数限定数据范围。 |
| 可选字段。自定义的切分主键。 |
| 可选字段。自定义的 过滤条件,适用于增量数据迁移。 |
| 指定数据读取起始时间,需与 、 等参数同用。源数据库为 KaiwuDB 或 InfluxDB 时为必选字段。如果已配置 参数,则无需设置此参数。 |
| 指定数据读取终止时间,需与 、 等参数同用。源数据库为 KaiwuDB 或 InfluxDB 时为必选字段。如果已配置 参数,则无需设置此参数。 |
| 可选字段。切分时间间隔。该参数只适用于 KaiwuDB 和 InfluxDB。 |
| 可选字段。指定时序表第一列(时间戳列),与 参数同效。源数据库为 KaiwuDB 时为必选字段。 |
| 可选字段。指定源端字符集类型,该参数只适用于 TDengine 。 |
| 可选字段。指定源端查询条件,该参数只适用于 MongoDB。 |
下表列出目标数据库的相关配置参数。
参数 | 说明 |
| 必选字段。指定目标数据库类型,支持 、 、 、 、 、 、 、 和 )。 |
| 指定目标数据库的URL。使用 时,无需再指定 和 。 |
| 指定目标数据库的 IP 地址。仅在未使用 参数时需要配置。 |
| 指定目标数据库的端口号。仅在未使用 参数时需要配置。 |
| 必选字段。目标数据库的用户名。 |
| 必选字段。目标数据库的用户密码。 |
| 必选字段。目标数据库的名称,区分大小写。 |
| 待写入数据的表名。MongoDB 中,该参数用作 的值。 |
| 待写入数据的表的列,可以配置为使用逗号( )隔开的字符串或 Json 字符串。写入的列名数量和顺序必须与读取的列名数量和顺序保持一致。 |
| 可选字段。数据写入模式,支持 、 ,默认为 。 |
| 可选字段。写入数据前要执行的 SQL 语句。该参数只适用于 KaiwuDB 和 TDengine。 |
| 可选字段。写入数据后要执行的 SQL 语句。该参数只适用于 KaiwuDB 和 TDengine。 |
从 KaiwuDB 2.2.0 版本开始,迁移命令不再支持 参数设置。如果需要设置 JVM 参数以增加内存,可以通过修改 DataX 配置文件来实现。 arguments
参数 | 说明 |
| 必选字段,配置文件的路径。 |
|
|
| 已安装的 Python 版本,迁移业务数据时为必选字段。 |
示例
java -jar -DyamlPath=../datax/test/config.yml -DdataxPath=../datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar