写点什么

MySQL 数据库迁移至 KWDB 的完整实践指南

作者:KaiwuDB
  • 2025-07-14
    重庆
  • 本文字数:11521 字

    阅读完需:约 38 分钟

MySQL数据库迁移至KWDB的完整实践指南

作者:江湖有缘


原文链接:https://blog.csdn.net/jks212454/article/details/147688558?spm=1011.2415.3001.5331

前言

随着企业业务的不断发展和数据量的持续增长,传统单机数据库在高并发、大数据量场景下逐渐暴露出性能瓶颈。分布式数据库作为新一代数据库技术,凭借其良好的扩展性、高可用性和高性能,正逐步成为企业数字化转型的重要支撑。KaiwuDB(KWDB) 作为一款高性能、强兼容的国产分布式数据库,原生支持多模数据处理,具备对 MySQL 等主流数据库的良好兼容能力。本文基于 KaiwuDB DataX Utils 工具,详细记录了从 MySQL 向 KaiwuDB 进行异构数据迁移的完整实践过程,旨在验证 KaiwuDB 在实际迁移场景中的稳定性与高效性,并为企业未来数据库选型与平滑迁移提供参考依据。

一、相关介绍

1.1 KWDB 介绍

KWDB 简介


KWDB 是一款面向 AIoT 场景的分布式、多模融合数据库产品。 支持在同一个实例中建立时序库和关系库,并统一处理多种类型的数据,具备对海量时序数据的高效读写与分析能力。 产品具备高可用、安全稳定、易运维等特性,广泛应用于工业物联网、数字能源、车联网、智慧矿山等多个行业领域,为用户提供一站式数据存储、管理与分析的基础平台。


主要特点


  • 高性能处理能力:支持海量时序数据高速读写,提供插值查询、数学函数等丰富的时序特色功能,提升应用效率。

  • 低运管成本:统一存储与管理多模数据,一套系统满足跨业务、跨部门数据融合需求,降低企业 IT 与运维投入。

  • 低存储成本:支持 5-30 倍数据压缩比,结合数据生命周期管理策略,灵活控制数据保留时间,显著节省存储资源。

  • 高安全性:提供数据库审计与加密机制,保障数据在复杂业务场景下的安全稳定运行。

  • 易用性强:提供标准 SQL 接口、高速写入、极速查询、集群部署等能力,与第三方工具无缝集成,开发运维更便捷。

1.2 MySQL 数据库介绍

MySQL 数据库简介


MySQL 是一种开源的关系型数据库管理系统(RDBMS),广泛用于 Web 应用程序的数据存储和管理。它由瑞典公司 MySQL AB 开发,目前由 Oracle 公司维护和开发。MySQL 以其高性能、可靠性和易用性著称,支持多种操作系统,包括 Linux、Windows 和 macOS。


MySQL 主要特点


MySQL 支持多用户访问,允许多个用户同时连接和操作数据库。它使用 SQL(结构化查询语言)进行数据管理,支持复杂的数据查询和操作。MySQL 提供了丰富的存储引擎,如 InnoDB、MyISAM 等,用户可以根据需求选择合适的存储引擎。

1.3 KaiwuDB DataX Utils 插件介绍

KaiwuDB DataX Utils 简介


KaiwuDB DataX Utils 是基于广受欢迎的离线数据同步工具 DataX 开发的一款数据库迁移工具。它专为 KaiwuDB(要求版本 2.0.3 及以上)设计,支持与多种主流数据库之间的离线数据同步功能。通过 KaiwuDB DataX Utils,用户可以轻松实现 KaiwuDB 与其他数据库如 MySQL、TDengine、MongoDB、InfluxDB、OpenTSDB、Oracle、PostgreSQL、ClickHouse 以及不同版本的 KaiwuDB(包括 1.2.x 和 2.x 版本)之间的数据迁移。此工具极大地简化了数据迁移过程,为用户提供了一个高效、便捷的数据同步解决方案。


支持的迁移形式


二、环境介绍

2.1 KWDB 部署环境要求

KWDB 数据库的硬件规格要求如下:


2.2 实践环境规划

本次实践为个人测试环境,实践环境规划如下所示:


2.3 迁移环境要求

在迁移服务器上,环境要求如下:


三、迁移环境准备工作

3.1 安装 openJDK

备注:迁移环境准备工作,在迁移服务器上进行操作。


执行以下命令,安装 openJDK。


yum install java-1.8.0-openjdk-devel -y
复制代码



检查 openJDK 版本,可以看到我们安装的版本为 1.8.0_432。


[root@openEuler ~]# java -versionopenjdk version "1.8.0_432"OpenJDK Runtime Environment BiSheng (build 1.8.0_432-b06)OpenJDK 64-Bit Server VM BiSheng (build 25.432-b06, mixed mode)
复制代码

3.2 安装 Python

执行以下命令,安装 Python。


yum  install python3 -y
复制代码



检查 python 安装版本,当前版本为 3.11.6


[root@openEuler ~]# python3 -VPython 3.11.6
复制代码

3.3 安装 maven

执行以下命令,安装 maven。


yum install maven -y
复制代码



检查 maven 版本,可以看到安装版本为 3.6.3。


[root@openEuler ~]# mvn -vApache Maven 3.6.3 (openEuler 3.6.3-2)Maven home: /usr/share/mavenJava version: 1.8.0_432, vendor: BiSheng, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-0.oe2403.x86_64/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "6.6.0-85.0.0.79.oe2403.x86_64", arch: "amd64", family: "unix"
复制代码

3.4 安装 DataX

DataX 是一款广泛使用的离线数据同步工具。KaiwuDB 基于 DataX 开发了数据库迁移工具 KaiwuDB DataX Utils,实现 KaiwuDB(2.0.3 及以上版本)与 MySQL、TDengine、MongoDB、InfluxDB、OpenTSDB、Oracle、PostgreSQL、ClickHouse、KaiwuDB(1.2.x)、KaiwuDB(2.x)等数据库的离线数据同步。


wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
复制代码



解压软件包


tar -xzf datax.tar.gz
复制代码


进入软件目录后,进入 bin 目录,即可运行同步作业:


[root@openEuler ~]# cd datax/[root@openEuler datax]# lsbin  conf  job  lib  plugin  script  tmp
复制代码

3.5 安装 KaiwuDB DataX 插件

下载 KaiwuDB DataX 插件


wget https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KaiwuDB_datax-2.2.0.zip
复制代码


解压 KaiwuDB DataX 插件包


unzip  KaiwuDB_datax-2.2.0.zip
复制代码


将解压后的 kaiwudbwriter 复制到 datax/plugin/writer 目录


[root@openEuler ~]# cp -r kaiwudbwriter datax/plugin/writer/[root@openEuler ~]#
复制代码


验证插件安装


[root@openEuler ~]# ls datax/plugin/writer/kaiwudbwriterkaiwudbwriter-2.1.0.jar  libs  plugin_job_template.json  plugin.json
复制代码

四、安装 MySQL 数据库

4.1 检查 MySQL 软件包

在 Rocky Linux 9 环境中,MySQL 8.0 版本可通过 AppStream 存储库获取。为了确认 MySQL 相关的软件包是否可用,我们可以通过以下命令列出所有与 MySQL 相关的软件包:


[root@rockylinux ~]# yum list  all  | grep mysqlmysql80-community-release.noarch                     el9-1                               @@commandlineapr-util-mysql.x86_64                                1.6.1-23.el9                        appstreamdovecot-mysql.x86_64                                 1:2.3.16-14.el9                     appstreammysql.x86_64                                         8.0.41-2.el9_5                      appstreammysql-common.x86_64                                  8.0.41-2.el9_5                      appstreammysql-errmsg.x86_64                                  8.0.41-2.el9_5                      appstreammysql-selinux.noarch                                 1.0.13-1.el9_5                      appstreammysql-server.x86_64                                  8.0.41-2.el9_5                      appstreampcp-pmda-mysql.x86_64                                6.2.2-7.el9_5                       appstreamphp-mysqlnd.x86_64                                   8.0.30-1.el9_2                      appstreampostfix-mysql.x86_64                                 2:3.5.25-1.el9                      appstreamqt5-qtbase-mysql.i686                                5.15.9-10.el9_4                     appstreamqt5-qtbase-mysql.x86_64                              5.15.9-10.el9_4                     appstreamrsyslog-mysql.x86_64                                 8.2310.0-4.el9                      appstreamrubygem-mysql2.x86_64                                0.5.3-11.el9_0                      appstream
复制代码

4.2 安装 MySQL

执行以下步骤,开始安装 MySQL 数据库。


yum install mysql-server -y
复制代码


4.3 启动 MySQL 服务

启动 MySQL 服务并设置开机自启:


 systemctl enable --now mysqld
复制代码


检查 MySQL 服务状态


systemctl status mysqld
复制代码


4.4 本地连接 MySQL

安装 8.0.41 时候,系统会创建一个没有密码的 root 用户,我们直接本地登录。


mysql -uroot -p
复制代码


4.5 用户管理

修改修改本地用户’root’@‘localhost’ 的密码,如下所示:


ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root.22#33';
复制代码


新增用户 kwadmin 用户,用于数据迁移。


create user 'kwadmin'@'%' identified WITH mysql_native_password BY 'kwadmin';grant all on *.* to  'kwadmin'@'%'    with GRANT OPTION;flush privileges;
复制代码


4.6 测试远程登录

使用我们新建的账号 kwadmin 进行远程登录 Mysql 数据库,如下所示:


 mysql -h 192.168.3.122 -ukwadmin -pkwadmin
复制代码


五、创建测试业务数据

5.1 创建数据表

我们在源数据库—MySQL 中,创建数据库 school。


CREATE DATABASE IF NOT EXISTS school    CHARACTER SET utf8mb4     COLLATE utf8mb4_unicode_ci;
复制代码



创建一张数据表 student,如下所示:


use school;
复制代码


DROP TABLE IF EXISTS student;CREATE TABLE student (    id INT PRIMARY KEY AUTO_INCREMENT,    name VARCHAR(9) NOT NULL COMMENT '最长3个汉字(3*3=9字节)',    class VARCHAR(10) NOT NULL,    gender ENUM('男', '女') NOT NULL,    height DECIMAL(4,1) NOT NULL COMMENT '厘米',    age TINYINT NOT NULL COMMENT '15-18岁',    chinese TINYINT NOT NULL COMMENT '30-100分',    math TINYINT NOT NULL,    english TINYINT NOT NULL,    physics TINYINT NOT NULL,    chemistry TINYINT NOT NULL,    biology TINYINT NOT NULL) ENGINE=InnoDB   DEFAULT CHARSET=utf8mb4   COLLATE=utf8mb4_unicode_ci;
复制代码



查看数据表的字段,可以看到刚才创建 student 表的字段情况。


mysql> show columns from student;+-----------+-------------------+------+-----+---------+----------------+| Field     | Type              | Null | Key | Default | Extra          |+-----------+-------------------+------+-----+---------+----------------+| id        | int               | NO   | PRI | NULL    | auto_increment || name      | varchar(9)        | NO   |     | NULL    |                || class     | varchar(10)       | NO   |     | NULL    |                || gender    | enum('男','女')   | NO   |     | NULL    |                || height    | decimal(4,1)      | NO   |     | NULL    |                || age       | tinyint           | NO   |     | NULL    |                || chinese   | tinyint           | NO   |     | NULL    |                || math      | tinyint           | NO   |     | NULL    |                || english   | tinyint           | NO   |     | NULL    |                || physics   | tinyint           | NO   |     | NULL    |                || chemistry | tinyint           | NO   |     | NULL    |                || biology   | tinyint           | NO   |     | NULL    |                |+-----------+-------------------+------+-----+---------+----------------+12 rows in set (0.00 sec)
复制代码

5.2 创建中文姓名生成函数

创建随机姓氏函数 rand_last_name


DELIMITER $$
DROP FUNCTION IF EXISTS rand_last_name;CREATE FUNCTION rand_last_name() RETURNS VARCHAR(1) CHARSET utf8mb4NO SQLBEGIN DECLARE last_names VARCHAR(100) DEFAULT '李王张刘陈杨黄赵周吴徐孙朱马胡郭林何高梁郑罗宋谢唐韩曹许邓萧冯曾程蔡潘袁于董余苏叶吕魏蒋田杜丁沈姜范江傅钟卢汪戴崔任陆廖姚方金邱夏谭韦贾邹石熊孟秦阎薛侯雷白龙段郝孔邵史毛常万顾赖武康贺严尹钱施牛洪龚';
RETURN SUBSTR(last_names, FLOOR(1 + RAND() * 100), 1);END$$
DELIMITER ;
复制代码



创建随机名字函数 rand_first_name


DELIMITER $$
DROP FUNCTION IF EXISTS rand_first_name;CREATE FUNCTION rand_first_name() RETURNS VARCHAR(4) CHARSET utf8mb4NO SQLBEGIN DECLARE first_names VARCHAR(500) DEFAULT '安柏冰波彩婵超晨诚春丹德东芳菲芬风峰刚歌格国海浩荷弘华辉慧佳嘉健杰洁静娟君俊凯康可兰乐磊丽莉良琳玲龙露璐曼梅美萌明娜楠妮宁萍强倩琴清晴蓉瑞莎珊舒帅涛婷伟文雯霞夏贤翔欣秀雪燕阳洋瑶宜怡义艺英莹颖勇雨玉云哲珍真志智忠洲珠竹庄卓子梓';
-- 随机决定名字长度:1或2个汉字 SET @name_length = FLOOR(1 + RAND() * 2); -- 1 or 2
IF @name_length = 1 THEN RETURN SUBSTRING(first_names, FLOOR(1 + RAND() * CHAR_LENGTH(first_names)), 1); ELSE RETURN CONCAT( SUBSTRING(first_names, FLOOR(1 + RAND() * CHAR_LENGTH(first_names)), 1), SUBSTRING(first_names, FLOOR(1 + RAND() * CHAR_LENGTH(first_names)), 1) ); END IF;END$$
DELIMITER ;
复制代码



创建完整姓名函数 rand_full_name


DELIMITER $$
DROP FUNCTION IF EXISTS rand_full_name;CREATE FUNCTION rand_full_name() RETURNS VARCHAR(10) CHARSET utf8mb4NO SQLBEGIN RETURN CONCAT(rand_last_name(), rand_first_name());END$$
DELIMITER ;
复制代码


5.3 创建批量插入存储过程

创建批量插入存储过程


DELIMITER $$
DROP PROCEDURE IF EXISTS batch_insert_students;CREATE PROCEDURE batch_insert_students(IN total INT)BEGIN DECLARE i INT DEFAULT 0; DECLARE CONTINUE HANDLER FOR 1366 BEGIN -- 记录错误但不中断(仅限测试环境) GET DIAGNOSTICS CONDITION 1 @p1 = MESSAGE_TEXT; INSERT INTO error_log (message) VALUES (@p1); END;
WHILE i < total DO INSERT INTO student (name, class, gender, height, age, chinese, math, english, physics, chemistry, biology) VALUES ( rand_full_name(), CONCAT(FLOOR(1+RAND()*3), '年级', FLOOR(1+RAND()*10), '班'), IF(RAND() > 0.5, '男', '女'), ROUND(140 + RAND()*50, 1), 15 + FLOOR(RAND()*4), FLOOR(30 + RAND()*71), FLOOR(30 + RAND()*71), FLOOR(30 + RAND()*71), FLOOR(30 + RAND()*71), FLOOR(30 + RAND()*71), FLOOR(30 + RAND()*71) ); SET i = i + 1; END WHILE;END$$
DELIMITER ;
复制代码


5.4 执行数据生成

调用存储过程插入 2000 条学生数据


CALL batch_insert_students(2000);
复制代码


5.5 验证数据条数

验证数据条数


mysql> SELECT COUNT(*) FROM student;+----------+| COUNT(*) |+----------+|     2000 |+----------+1 row in set (0.00 sec)
mysql>
复制代码


查看前 5 条样例数据


mysql> SELECT * FROM student LIMIT 5;+----+-----------+-------------+--------+--------+-----+---------+------+---------+---------+-----------+---------+| id | name      | class       | gender | height | age | chinese | math | english | physics | chemistry | biology |+----+-----------+-------------+--------+--------+-----+---------+------+---------+---------+-----------+---------+|  1 | 董梓芳    | 2年级7班    | 女     |  181.0 |  15 |      98 |   71 |      30 |      52 |        66 |      77 ||  2 | 白竹华    | 1年级8班    | 女     |  185.4 |  16 |      40 |   73 |      72 |      43 |        38 |      32 ||  3 | 毛梓      | 2年级3班    | 女     |  164.8 |  18 |      54 |   60 |      36 |      44 |        82 |      33 ||  4 | 赵燕      | 1年级9班    | 女     |  159.9 |  18 |      54 |  100 |      96 |      82 |        89 |      98 ||  5 | 袁佳霞    | 3年级5班    | 男     |  161.2 |  16 |      60 |   38 |      51 |      40 |        87 |      75 |+----+-----------+-------------+--------+--------+-----+---------+------+---------+---------+-----------+---------+5 rows in set (0.00 sec)
mysql>
复制代码


5.6 增加数据

经过以上测试生成数据成功,我们增加数据 10 万条左右。等待一段时间,可以看到已经成功生成 10 万条左右数据。


mysql> CALL batch_insert_students(100000);Query OK, 1 row affected (4 min 41.65 sec)
mysql>
复制代码


mysql>  SELECT COUNT(*) FROM student;+----------+| COUNT(*) |+----------+|   102000 |+----------+1 row in set (0.01 sec)
mysql>
复制代码


通过执行以下命令,我们可以检查需要迁移的测试数据大小。根据查询结果,当前数据库中存储的数据总量为 6.52 MB。


SELECT     ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)'FROM     information_schema.TABLESWHERE     TABLE_SCHEMA = 'school';
复制代码


六、安装 KWDB 数据库

6.1 下载 KWDB 软件包

创建下载目录/data/kwdb


mkdir -p /data/kwdb && cd /data/kwdb
复制代码


执行以下命令,下载 KWDB 安装包。


wget https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz
复制代码


执行以下命令,解压 KWDB 软件包。


 tar -xzf KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz
复制代码


查看软件包解压后,内容如下所示:


root@jeven01:/data/kwdb# ll kwdb_install/total 52drwxr-xr-x 4 root root  4096 Mar 31 07:22 ./drwxr-xr-x 3 root root  4096 May  5 15:58 ../-rwxr-xr-x 1 root root  2024 Mar 31 07:11 add_user.sh*-rw-r--r-- 1 root root  3605 Mar 31 07:12 .construction_var-rw-r--r-- 1 root root   465 Mar 31 07:11 deploy.cfg-rwxr-xr-x 1 root root 24410 Mar 31 07:11 deploy.sh*drwxr-xr-x 2 root root  4096 Mar 31 07:22 packages/drwxr-xr-x 2 root root  4096 Mar 31 07:11 utils/root@jeven01:/data/kwdb#
复制代码

6.2 编辑配置文件

在解压目录 kwdb_install/ 中,编辑 deploy.cfg 配置文件以设置安全模式、管理用户和服务端口等信息。


vim kwdb_install/deploy.cfg
复制代码


[global]# Whether to turn on secure modesecure_mode=tls# Management KaiwuDB usermanagement_user=kaiwudb# KaiwuDB cluster http portrest_port=8080# KaiwuDB service portkaiwudb_port=26257# KaiwuDB data directorydata_root=/var/lib/kaiwudb# CPU usage[0-1]# cpu=1[local]# local node configurationnode_addr=192.168.3.88# section cluster is optional#[cluster]# remote node addr,split by ','#node_addr=127.0.0.2,127.0.0.3# ssh info#ssh_port=22#ssh_user=admin
复制代码


deploy.cfg 配置文件说明


  • 全局配置([global])



  • 节点配置([local])



6.3 安装前准备工作

进入 KWDB 软件目录,如下所示:


root@jeven01:/data/kwdb# cd kwdb_install/root@jeven01:/data/kwdb/kwdb_install# lsadd_user.sh  deploy.cfg  deploy.sh  packages  utils
复制代码


执行以下命令,为 deploy.sh 脚本添加运行权限。


chmod +x ./deploy.sh
复制代码


执行以下命令,我们手动安装 libprotobuf23 库。


apt install libprotobuf23 -y 
复制代码


6.4 安装 KWDB 数据库

我们使用部署脚本 deploy.sh 一键完成 KWDB 的安装与配置,如下所示:


./deploy.sh install --single
复制代码


在安装过程中,系统会提示您输入新增用户 jeven 的密码,请按指示自行输入。请注意,本次实践基于配置为 4 核 CPU 和 8GB 内存的虚拟机环境。由于该配置可能触发“CPU 规格不满足要求”的警告,建议根据实际需求调整虚拟机规格以避免此类警告。提升机器的硬件配置(如增加 CPU 核心数)可以有效解决这一问题。



安装成功后,会出现以下提示信息。


6.5 启动 KWDB 节点

执行以下命令,重新加载 systemd 守护进程的配置文件。


systemctl daemon-reload
复制代码


启动 KWDB 数据库,如下所示:


./deploy.sh start
复制代码



执行以下命令,设置 KWDB 服务开自启。


systemctl enable kaiwudb
复制代码

6.6 查看 KWDB 数据库状态

我们可以使用 systemctl status kaiwudb 命令,查看 KWDB 服务状态。


systemctl status kaiwudb
复制代码


6.7 设置 KWDB 登录用户

如果在安装过程中由于等待时间过长而未设置用户密码,或者遇到密码遗忘、登录失败等情况,可以通过执行 add_user.sh 脚本来创建新的数据库用户。此脚本提供了一种简便的方法来重新设定访问凭据,确保我们能够顺利恢复对数据库的管理与操作。我们创建与在源数据库 MySQL 中的账号密码保持一致,都为 kwadmin。


./add_user.sh
复制代码



我们执行以下命令,使用 kwadmin 用户连接 KWDB 数据库。


root@jeven01:/data/kwdb/kwdb_install# kwbase sql --certs-dir=/etc/kaiwudb/certs  --host=192.168.3.88    --host=192.168.3.88 -u kwadmin## Welcome to the KWDB SQL shell.# All statements must be terminated by a semicolon.# To exit, type: \q.#Enter password:# Server version: KaiwuDB 2.2.0 (x86_64-linux-gnu, built 2025/03/31 07:20:02, go1.16.15, gcc 11.4.0) (same version as client)# Cluster ID: 4335d3f6-5648-4bd3-b181-ed48b29cd7a4## Enter \? for a brief introduction.#kwadmin@192.168.3.88:26257/defaultdb>
复制代码


检查用户权限,为了保证迁移成功,确保新创建的角色拥有 admin 角色权限。


kwadmin@192.168.3.88:26257/defaultdb> show roles;  username |  options   | member_of-----------+------------+------------  admin    | CREATEROLE | {}  kwadmin  |            | {admin}  kwdbuser |            | {admin}  root     | CREATEROLE | {admin}  wangming |            | {admin}(5 rows)
Time: 4.826265ms
kwadmin@192.168.3.88:26257/defaultdb>
复制代码


6.8 创建目标数据库

在 KWDB 上创建一个名为 school 的目标数据库。确保新创建的数据库名称与源数据库(MySQL)中的数据库名称保持一致。这一步骤对于保证数据迁移过程的准确性和顺利进行至关重要。


CREATE DATABASE IF NOT EXISTS school;
复制代码


七、数据迁移工作

7.1 配置文件准备

在迁移服务器上,我们新建配置文件 mysql2kaiwudb.yml。


vim 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.3.122:3306/mysql_kaiwudb?useSSL=false&useUnicode=true&characterEncoding=utf8  # MySQL 连接 URL  username: kwadmin       # MySQL 数据库用户名  password: kwadmin       # MySQL 数据库密码  databases:    - name: school    # 源数据库名target:  type: KAIWUDB              # 目标数据库是 KaiwuDB  url: jdbc:kaiwudb://192.168.3.88:26257/mysql_kaiwudb  # KaiwuDB 连接 URL  username: kwadmin       # KaiwuDB 数据库用户名  password: kwadmin       # KaiwuDB 数据库密码  databases:    - name: school    # 目标数据库名
复制代码

7.2 执行迁移操作

  • 进入到 kaiwudb-datax-utils-2.2.0.jar 所在目录,


[root@openEuler ~]# cd ~/datax/plugin/writer/kaiwudbwriter[root@openEuler kaiwudbwriter]# lskaiwudbwriter-2.1.0.jar  libs  plugin_job_template.json  plugin.json
复制代码


  • 执行以下命令,开始迁移表元数据和业务数据。


nohup java -jar \  -DyamlPath=/data/migration/mysql2kaiwudb.yml \  -DdataxPath=/root/datax \  -Dpython=/usr/bin/python3 \   kaiwudb-datax-utils-2.2.0.jar > migration.log 2>&1 &
复制代码


  • 具体参数解释:



7.3 查看迁移报告

执行以下命令,查看迁移结速后的输出信息,可以看到迁移报告路径为:/root/datax/log/迁移报告_20250514153231000316.pdf。


tail -f migration.log
复制代码



在本地电脑打开迁移报告_20250514153231000316.pdf 文件,结果如下所示:


7.4 查看 KWDB 数据库迁移内容

进入到迁移目的数据库 KWDB,如下所示:


root@jeven01:~# kwbase sql --certs-dir=/etc/kaiwudb/certs  --host=192.168.3.88    --host=192.168.3.88 -u kwadmin## Welcome to the KWDB SQL shell.# All statements must be terminated by a semicolon.# To exit, type: \q.#Enter password:# Server version: KaiwuDB 2.2.0 (x86_64-linux-gnu, built 2025/03/31 07:20:02, go1.16.15, gcc 11.4.0) (same version as client)# Cluster ID: 4335d3f6-5648-4bd3-b181-ed48b29cd7a4## Enter \? for a brief introduction.#kwadmin@192.168.3.88:26257/defaultdb> show databases;        database_name        | engine_type-----------------------------+--------------  defaultdb                  | RELATIONAL  postgres                   | RELATIONAL  school                     | RELATIONAL  system                     | RELATIONAL  your_default_database_name | RELATIONAL(5 rows)
Time: 1.204711ms
kwadmin@192.168.3.88:26257/defaultdb>
复制代码


我们在 KWDB 数据库中,查询到 student 数据表中为 102000 条数据,迁移后的数据与原数据表保持一致。


kwadmin@192.168.3.88:26257/defaultdb>kwadmin@192.168.3.88:26257/defaultdb> use school;SET
Time: 426.224µs
kwadmin@192.168.3.88:26257/school> SELECT COUNT(*) FROM student; count---------- 102000(1 row)
Time: 35.623686ms
kwadmin@192.168.3.88:26257/school> SELECT * FROM student LIMIT 5; id | name | class | gender | height | age | chinese | math | english | physics | chemistry | biology-----+--------+----------+--------+--------+-----+---------+------+---------+---------+-----------+---------- 1 | 董梓芳 | 2年级7班 | 女 | 181.0 | 15 | 98 | 71 | 30 | 52 | 66 | 77 2 | 白竹华 | 1年级8班 | 女 | 185.4 | 16 | 40 | 73 | 72 | 43 | 38 | 32 3 | 毛梓 | 2年级3班 | 女 | 164.8 | 18 | 54 | 60 | 36 | 44 | 82 | 33 4 | 赵燕 | 1年级9班 | 女 | 159.9 | 18 | 54 | 100 | 96 | 82 | 89 | 98 5 | 袁佳霞 | 3年级5班 | 男 | 161.2 | 16 | 60 | 38 | 51 | 40 | 87 | 75(5 rows)
Time: 1.202576ms
kwadmin@192.168.3.88:26257/school>
复制代码


我们对迁移前的源数据库和迁移后的目标数据库进行了简单的对比,结果显示数据保持了一致性。


八、分析与总结

本次从 MySQL 到 KaiwuDB(KWDB)的数据迁移实践,整体过程平稳高效,充分体现了 KaiwuDB 在异构数据库兼容和性能方面的优势。通过使用 KaiwuDB DataX Utils 插件,结合 DataX 强大的数据同步能力,整个迁移任务在短短 100 秒内完成了 102,000 条记录的迁移,平均写入速度达到 1020 记录/秒,流量稳定在 32.45KB/s,全程无错误发生,数据一致性得到了有效保障。KWDB 不仅成功自动识别并创建了与源数据库同名的目标数据库,还展现了良好的系统稳定性与高并发处理能力,GC 和 CPU 资源占用均控制在合理范围内。此次实践验证了 KWDB 在国产化替代及多场景融合中的强大适配能力,也体现了其迁移到位后的高性能读写与易用性,是一款值得信赖的企业级分布式数据库产品。


发布于: 2025-07-14阅读数: 2
用户头像

KaiwuDB

关注

还未添加个人签名 2021-04-29 加入

KaiwuDB 是浪潮集团控股的数据库企业,公司汇聚了全球顶尖的数据库人才,以多模数据库为核心产品,面向工业物联网、数字能源、交通车联网、智慧产业等各大行业领域,提供领先创新的数据服务软件。

评论

发布
暂无评论
MySQL数据库迁移至KWDB的完整实践指南_数据库_KaiwuDB_InfoQ写作社区