【KWDB 创作者计划】MySQL数据库迁移至KWDB的完整实践指南
【KWDB 创作者计划】MySQL数据库迁移至KWDB的完整实践指南
- 前言
- 一、相关介绍
- 1.1 KWDB介绍
- 1.2 MySQL数据库介绍
- 1.3 KaiwuDB DataX Utils插件介绍
- 二、环境介绍
- 2.1 KWDB部署环境要求
- 2.2 实践环境规划
- 2.3 迁移环境要求
- 三、迁移环境准备工作
- 3.1 安装openJDK
- 3.2 安装 Python
- 3.3 安装maven
- 3.4 安装DataX
- 3.5 安装KaiwuDB DataX 插件
- 四、安装MySQL数据库
- 4.1 检查MySQL软件包
- 4.2 安装MySQL
- 4.3 启动MySQL服务
- 4.4 本地连接MySQL
- 4.5 用户管理
- 4.6 测试远程登录
- 五、创建测试业务数据
- 5.1 创建数据表
- 5.2 创建中文姓名生成函数
- 5.3 创建批量插入存储过程
- 5.4 执行数据生成
- 5.5 验证数据条数
- 5.6 增加数据
- 六、安装KWDB数据库
- 6.1 下载KWDB软件包
- 6.2 编辑配置文件
- 6.3 安装前准备工作
- 6.4 安装KWDB数据库
- 6.5 启动KWDB节点
- 6.6 查看KWDB数据库状态
- 6.7 设置KWDB登录用户
- 6.8 创建目标数据库
- 七、数据迁移工作
- 7.1 配置文件准备
- 7.2 执行迁移操作
- 7.3 查看迁移报告
- 7.4 查看KWDB数据库迁移内容
- 八、分析与总结
前言
随着企业业务的不断发展和数据量的持续增长,传统单机数据库在高并发、大数据量场景下逐渐暴露出性能瓶颈。分布式数据库作为新一代数据库技术,凭借其良好的扩展性、高可用性和高性能,正逐步成为企业数字化转型的重要支撑。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版本)之间的数据迁移。此工具极大地简化了数据迁移过程,为用户提供了一个高效、便捷的数据同步解决方案。
- 支持的迁移形式
迁移形式 | 描述 |
---|---|
元数据迁移 | 无需在目标数据库创建待迁移的表,KaiwuDB DataX Utils将自动读取源数据库的表结构信息,生成相应的建表语句,并创建符合目标数据库要求的表结构。 |
元数据和业务数据迁移 | 在迁移过程中,除了自动创建目标数据库中的表结构外,KaiwuDB DataX Utils还会将源数据库中的业务数据迁移到目标数据库中。 |
业务数据迁移 | 用户需先在目标数据库创建好表结构,之后可以单表、多表、单库或多库的形式对表内的业务数据进行迁移。
|
二、环境介绍
2.1 KWDB部署环境要求
- KWDB数据库的硬件规格要求如下:
项目 | 要求 |
---|---|
CPU 和内存 | 单节点建议配置不低于 4 核心 CPU 和 8 GB 内存。对于数据量大、复杂的工作负载、高并发以及对性能要求较高的场景,建议增加 CPU 核心数和内存容量,以确保系统的高效运行和稳定性。 |
磁盘 | - 推荐使用 SSD 或 NVMe 存储设备,避免使用 NFS、CIFS、CEPH 等共享存储。 - 磁盘需具备至少 500 IOPS(每秒输入输出操作次数)和 30 MB/s 的处理效率,以满足数据库的读写需求。 |
文件系统 | 建议使用 ext4 文件系统,以提供良好的兼容性和性能表现。 |
备注 | 在实际部署过程中,用户应根据具体的业务规模和性能需求灵活规划硬件资源,确保系统能够高效稳定地运行。 |
2.2 实践环境规划
本次实践为个人测试环境,实践环境规划如下所示:
hostname | IP地址 | 操作系统版本 | 内核版本 | 部署项目 | 角色 |
---|---|---|---|---|---|
jeven01 | 192.168.3.88 | Ubuntu 22.04.1 LTS | 5.15.0-139-generic | KaiwuDB 2.2.0 | 目的数据库 |
rockylinux | 192.168.3.122 | Rocky Linux 9.4 (Blue Onyx) | 5.14.0-427.13.1.el9_4.x86_64 | MySQL 8.0.41 | 源数据库 |
openEuler | 192.168.3.83 | openEuler 24.03 (LTS) | 6.6.0-85.0.0.79.oe2403.x86_64 | 部署迁移环境 | 迁移服务器 |
2.3 迁移环境要求
- 在迁移服务器上,环境要求如下:
软件 | 版本要求 | 备注 |
---|---|---|
OpenJDK | 1.8及以上版本 | 推荐使用1.8版本 |
Python | 2.x或3.x | 根据需求选择 |
Maven | 3.6及以上版本 | |
DataX | 3.0 |
三、迁移环境准备工作
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。
yum install python3 -y
检查python安装版本,当前版本为
3.11.6
[root@openEuler ~]# python3 -V
Python 3.11.6
3.3 安装maven
执行以下命令,安装maven。
yum install maven -y
检查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
- 解压软件包
tar -xzf 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服务状态
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 schoolCHARACTER 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 utf8mb4
NO SQL
BEGINDECLARE 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
BEGINDECLARE first_names VARCHAR(500) DEFAULT '安柏冰波彩婵超晨诚春丹德东芳菲芬风峰刚歌格国海浩荷弘华辉慧佳嘉健杰洁静娟君俊凯康可兰乐磊丽莉良琳玲龙露璐曼梅美萌明娜楠妮宁萍强倩琴清晴蓉瑞莎珊舒帅涛婷伟文雯霞夏贤翔欣秀雪燕阳洋瑶宜怡义艺英莹颖勇雨玉云哲珍真志智忠洲珠竹庄卓子梓';-- 随机决定名字长度:1或2个汉字SET @name_length = FLOOR(1 + RAND() * 2); -- 1 or 2IF @name_length = 1 THENRETURN SUBSTRING(first_names, FLOOR(1 + RAND() * CHAR_LENGTH(first_names)), 1);ELSERETURN 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
BEGINRETURN 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)
BEGINDECLARE 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 DOINSERT 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
配置文件说明
- 全局配置([global])
配置项 | 默认值 | 可选值 / 说明 |
---|---|---|
secure_mode | tls | 安全模式设置: - insecure :非安全模式- tls (默认):启用 TLS 安全通信,证书生成路径为 /etc/kaiwudb/certs - tlcp :启用 TLCP 国密安全通信,证书路径同上 |
management_user | kaiwudb | 设置 KaiwuDB 管理用户,默认会创建同名用户组 |
rest_port | 8080 | Web UI 和 REST API 接口端口号 |
kaiwudb_port | 26257 | KaiwuDB 数据库服务监听端口号 |
data_root | /var/lib/kaiwudb | 数据存储根目录,建议指定到有足够空间的路径 |
cpu | 无限制 | 控制 KaiwuDB 使用 CPU 资源的比例,取值范围 [0,1] ,例如 0.5 表示最多使用 50% 的 CPU 资源。注意:Ubuntu 18.04 需手动修改 kaiwudb.service 文件中的 CPUQuota 值为整型(如 150% → 150 ) |
- 点配置([local])
配置项 | 默认值 | 说明 |
---|---|---|
node_addr | 无 | 指定本地节点对外提供服务的 IP 地址,通常设置为 0.0.0.0 表示监听所有网络接口 |
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 脚本添加运行权限。
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.826265mskwadmin@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 # 设置通道数为 1errorLimit:percentage: 0.02 # 允许错误数据的比例为 2%core:transport:channel:speed:byte: 1048576 # 每个通道的传输速率为 1 MBrecord: 1000 # 每个通道每批次传输 1000 条记录
source:type: MYSQL # 源数据库类型是 MySQLurl: jdbc:mysql://192.168.3.122:3306/mysql_kaiwudb?useSSL=false&useUnicode=true&characterEncoding=utf8 # MySQL 连接 URLusername: kwadmin # MySQL 数据库用户名password: kwadmin # MySQL 数据库密码databases:- name: school # 源数据库名
target:type: KAIWUDB # 目标数据库是 KaiwuDBurl: jdbc:kaiwudb://192.168.3.88:26257/mysql_kaiwudb # KaiwuDB 连接 URLusername: 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]# 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 &
- 具体参数解释:
命令部分 | 含义解释 |
---|---|
nohup | 用于在退出终端后仍让进程继续运行,防止因关闭终端导致任务中断。 |
java -jar | 指示操作系统使用Java来执行后面的JAR包文件。 |
-DyamlPath=/data/migration/mysql2kaiwudb.yml | 设置系统属性yamlPath ,指定包含数据库迁移配置的YAML文件路径。 |
-DdataxPath=/root/datax | 设置系统属性dataxPath ,指定DataX工具所在的根目录,该目录下通常包含执行数据同步所需的所有资源和脚本。 |
-Dpython=/usr/bin/python3 | 设置系统属性python ,指定Python解释器的位置,因为DataX是基于Python开发的,需要调用此解释器执行任务。 |
kaiwudb-datax-utils-2.2.0.jar | 要执行的Java程序的JAR包文件名,包含了执行KaiwuDB与其它数据库之间数据迁移的具体逻辑。 |
> migration.log | 将标准输出重定向到migration.log 文件中,记录程序的标准输出信息。 |
2>&1 | 将标准错误输出重定向到标准输出相同的位置(即migration.log ),确保所有输出都被记录到同一个日志文件中。 |
& | 将整个命令放到后台执行,使得终端可以立即返回而不会阻塞于该任务。 |
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 | RELATIONALpostgres | RELATIONALschool | RELATIONALsystem | RELATIONALyour_default_database_name | RELATIONAL
(5 rows)Time: 1.204711mskwadmin@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;
SETTime: 426.224µskwadmin@192.168.3.88:26257/school> SELECT COUNT(*) FROM student;count
----------102000
(1 row)Time: 35.623686mskwadmin@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 | 772 | 白竹华 | 1年级8班 | 女 | 185.4 | 16 | 40 | 73 | 72 | 43 | 38 | 323 | 毛梓 | 2年级3班 | 女 | 164.8 | 18 | 54 | 60 | 36 | 44 | 82 | 334 | 赵燕 | 1年级9班 | 女 | 159.9 | 18 | 54 | 100 | 96 | 82 | 89 | 985 | 袁佳霞 | 3年级5班 | 男 | 161.2 | 16 | 60 | 38 | 51 | 40 | 87 | 75
(5 rows)Time: 1.202576mskwadmin@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
在国产化替代及多场景融合中的强大适配能力,也体现了其迁移到位后的高性能读写与易用性,是一款值得信赖的企业级分布式数据库产品。