作者:江湖有缘
原文链接: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 -version
openjdk 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。
检查 python 安装版本,当前版本为 3.11.6
[root@openEuler ~]# python3 -V
Python 3.11.6
复制代码
3.3 安装 maven
执行以下命令,安装 maven。
检查 maven 版本,可以看到安装版本为 3.6.3。
[root@openEuler ~]# mvn -v
Apache Maven 3.6.3 (openEuler 3.6.3-2)
Maven home: /usr/share/maven
Java 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/jre
Default locale: en_US, platform encoding: UTF-8
OS 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
复制代码
解压软件包
进入软件目录后,进入 bin 目录,即可运行同步作业:
[root@openEuler ~]# cd datax/
[root@openEuler datax]# ls
bin 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/kaiwudbwriter
kaiwudbwriter-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 mysql
mysql80-community-release.noarch el9-1 @@commandline
apr-util-mysql.x86_64 1.6.1-23.el9 appstream
dovecot-mysql.x86_64 1:2.3.16-14.el9 appstream
mysql.x86_64 8.0.41-2.el9_5 appstream
mysql-common.x86_64 8.0.41-2.el9_5 appstream
mysql-errmsg.x86_64 8.0.41-2.el9_5 appstream
mysql-selinux.noarch 1.0.13-1.el9_5 appstream
mysql-server.x86_64 8.0.41-2.el9_5 appstream
pcp-pmda-mysql.x86_64 6.2.2-7.el9_5 appstream
php-mysqlnd.x86_64 8.0.30-1.el9_2 appstream
postfix-mysql.x86_64 2:3.5.25-1.el9 appstream
qt5-qtbase-mysql.i686 5.15.9-10.el9_4 appstream
qt5-qtbase-mysql.x86_64 5.15.9-10.el9_4 appstream
rsyslog-mysql.x86_64 8.2310.0-4.el9 appstream
rubygem-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 服务状态
4.4 本地连接 MySQL
安装 8.0.41 时候,系统会创建一个没有密码的 root 用户,我们直接本地登录。
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,如下所示:
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 utf8mb4
NO SQL
BEGIN
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 utf8mb4
NO SQL
BEGIN
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 utf8mb4
NO SQL
BEGIN
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.TABLES
WHERE
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 52
drwxr-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 mode
secure_mode=tls
# Management KaiwuDB user
management_user=kaiwudb
# KaiwuDB cluster http port
rest_port=8080
# KaiwuDB service port
kaiwudb_port=26257
# KaiwuDB data directory
data_root=/var/lib/kaiwudb
# CPU usage[0-1]
# cpu=1
[local]
# local node configuration
node_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 配置文件说明
6.3 安装前准备工作
进入 KWDB 软件目录,如下所示:
root@jeven01:/data/kwdb# cd kwdb_install/
root@jeven01:/data/kwdb/kwdb_install# ls
add_user.sh deploy.cfg deploy.sh packages utils
复制代码
执行以下命令,为 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 守护进程的配置文件。
启动 KWDB 数据库,如下所示:
执行以下命令,设置 KWDB 服务开自启。
6.6 查看 KWDB 数据库状态
我们可以使用 systemctl status kaiwudb 命令,查看 KWDB 服务状态。
6.7 设置 KWDB 登录用户
如果在安装过程中由于等待时间过长而未设置用户密码,或者遇到密码遗忘、登录失败等情况,可以通过执行 add_user.sh 脚本来创建新的数据库用户。此脚本提供了一种简便的方法来重新设定访问凭据,确保我们能够顺利恢复对数据库的管理与操作。我们创建与在源数据库 MySQL 中的账号密码保持一致,都为 kwadmin。
我们执行以下命令,使用 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。
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 执行迁移操作
[root@openEuler ~]# cd ~/datax/plugin/writer/kaiwudbwriter
[root@openEuler kaiwudbwriter]# ls
kaiwudbwriter-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。
在本地电脑打开迁移报告_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 在国产化替代及多场景融合中的强大适配能力,也体现了其迁移到位后的高性能读写与易用性,是一款值得信赖的企业级分布式数据库产品。
评论