KaiwuDBKaiwuDB

KWDB 创作者计划 | MySQL整库迁移至KaiwuDB

2025-05-14

原文链接:【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 将自动读取源数据库的表结构信息,生成相应的 建表语句 ,并创建符合目标数据库要求的表结构。

  • 元数据和业务数据迁移 :在迁移过程中,除了自动创建目标数据库中的表结构,KaiwuDB DataX Utils 还会将源数据库中的业务数据迁移到目标数据库中。
  • 业务数据迁移 :用户在目标数据库创建好表结构后,以单表、多表、单库和多库的形式对表内的业务数据进行迁移,其中:
    • 以表的形式迁移数据时  支持全量数据迁移和增量数据迁移 
    • 以库的形式迁移目前只支持将 MySQL 数据迁移到 KaiwuDB 的关系库 。迁移时, 源数据库与目标数据库必须一一对应 


下表列出了 KaiwuDB 支持迁移的异构源数据库和数据迁移方式。

源数据库

目标数据库

元数据

元数据 + 业务数据

业务数据

MySQL (MySQL的

KaiwuDB 关系库

表、库

表、库

表、库


KaiwuDB 时序库

表、库

PostgreSQL 数据库

KaiwuDB 关系库

表、库


KaiwuDB 时序库

表、库

TDengine 发动机

KaiwuDB 时序库

表、库

InfluxDB 数据库

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

默认已安装,查看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

默认已安装,查看python版本,需 2.x 或 3.x版本

[root@localhost ~]# python -V
Python 2.7.18

Python下载链接: https://www.python.org/downloads/

安装 Maven

查看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 3.0

DataX3.0介绍

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


下载KaiwuDB_datax插件

下载地址: https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0

KWDB 创作者计划 | MySQL整库迁移至KaiwuDB(图1)


收集源库信息

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;


部署环境

    • 安装 openJDKopen in new window (1.8 及以上版本, 建议使用 1.8 版本)。
    • 安装 Pythonopen in new window (2.x 或 3.x)。
    • 安装 Mavenopen in new window (3.6 及以上版本)。
    • 安装 DataX 3.0open in new window 
  • 工具
    • 获取 KaiwuDB 数据库迁移工具 KaiwuDB DataX Utils 的安装包。
    • 获取 KaiwuDB DataX 插件压缩包。
    • 获取待迁移数据库的 DataX 插件压缩包。

说明

    • DataX 安装包中已包含几乎所有已适配数据库的数据读写插件。如果在 DataX 安装包中未找到所需的插件,或版本不兼容,建议从源数据库的官方网站获取适配插件。
    • 将 InfluxDB 的元数据迁移到 KaiwuDB 时,需要使用 KaiwuDB 适配后的 InfluxDB reader 插件。
  • 数据库及权限设置
    • 安装并启动源数据库和目标数据库。
    • 创建需要读取和写入数据的数据库和数据表。

说明

    • 如果目标数据库是 KaiwuDB 或 TDengine,用户可以在配置文件中通过 参数创建待写入的数据表。 preSql[]
    • 如果源数据库是 MySQL、PostgreSQL、TDengine 或 InfluxDB 且目标数据库是 KaiwuDB,用户可以使用迁移工具迁移表结构数据,无需提前创建目标表。
    • 用户拥有源数据库和目标数据库的操作权限,包括数据库的创建权限、表数据的读取和写入权限。

MySQL 迁移到 KaiwuDB过程

上传并解压 KaiwuDB DataX 插件包

解压缩 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": {}
    },


扩展


配置文件参数


元数据 (metadata)

参数

说明

enable

可选字段,控制是否迁移元数据,设置为 时迁移元数据; true

设置为 时不迁移元数据。默认值为  false false

engine-type

指定目的端引擎类型。支持 (关系引擎)或 RELATIONAL TIMESERIES

(时序引擎)。元数据迁移时为必选字段。

auto-ddl

控制是否自动执行 DDL 建表语句,设置为 时,KaiwuDB 根据元数据自动在目标数据库中创建表,并将转换后的建表语句打印到指定 SQL 文件中。文件存储路径通过 启动参数指定。设置为 时,KaiwuDB 将输出转换后的建表语句,不执行建表作。元数据迁移时为必选字段。 true -dataxPath false

primary-key

控制生成的 DDL 语句中是否包含主键创建语句。设置为 时包含。设置为 时不包含。该参数 只适用于关系数据的迁移。 true false

constraint

控制生成的 DDL 语句中是否包含约束创建语句。设置为 时包含。设置为 时不包含。 该参数只适用于关系数据的迁移。 true false

comment

控制生成的 DDL 语句中是否包含注释创建语句。设置为 时包含。设置为 时不包含。 true false

index

控制生成的 DDL 语句中是否包含索引创建语句。设置为 时包含。设置为 时不包含。 true false

view

控制生成的 DDL 语句中是否包含视图创建语句。设置为 时包含。设置为 时不包含。 该参数只适用于关系数据的迁移。 true false


业务数据 (data)

参数

说明

enable

可选字段,控制是否迁移业务数据,设置为 true

时迁移业务数据。设置为 时不迁移业务数据。默认值为 。 false false

readTimeout

可选字段。源端数据库为 InfluxDB 时,指定读取数据的超时时间。默认值为 ,表示 10 秒。支持配置大于 10 的数值。 10

fetchSize

可选字段。单次读取数据的条数,默认值为 1000

batchSize

可选字段。批量写入的数据条数。默认值为 1000

ignoreTagsUnmatched

可选字段,源端数据库为 TDengine 时,控制是否忽略不匹配的标签,支持设置为 (忽略)或 (不忽略)。 true false

setting.speed.channel

可选字段。迁移通道的数量。

setting.speed.byte

可选字段。迁移通道速度。如果单通道速度为 1 MB,设置为 时, 表示一个通道。 1048576

setting.speed.record

可选字段。传输的记录数量。

setting.errorLimit.percentage

可选字段。出错限制百分比。设置为 时,表示 100%。 1

setting.errorLimit.record

可选字段。发生错误的记录数量,定义错误发生时抛出异常的时机。设置为 时,表示报错后立即抛出异常,任务失败。 0

setting.errorLimit.byte

可选字段。读写数据时允许出现的错误所占的字节数的上限。

core.transport.channel.speed.byte

可选字段。通道速度。

core.transport.channel.speed.record

可选字段。读取的记录数量。


源数据库(source)

参数

说明

type

必选字段。指定源端数据库类型,支持 KAIWUDB

 MYSQL

 ORACLE

 POSTGRESQL

 CLICKHOUSE

 TDENGINE3X

 TDENGINE2X

 INFLUXDB2X

 INFLUXDB1X

 MONGODB

和 )。 OPENTSDB

url

指定连接到源数据库的 URL。部分源数据库中,该参数用作 的值。使用 时,无需再指定 和 。 endpoint url host port

host

指定源端数据库的 IP 地址。仅在未使用 url

参数时需要配置。

port

指定源端数据库的端口号。仅在未使用 url

参数时需要配置。

username

必选字段。源数据库的用户名,InfluxDB 2.X 中,该参数用作 的值。 org

password

必选字段。源数据库的用户密码,密码不得为空,InfluxDB 2.X 中,该参数用作 的值。 token

databases.name

源端数据库名称,大小写敏感,InfluxDB2.X 中会用作 的值。 bucket

databases.tables.name

待读取数据的表名,例如 sensor_data

。指定后系统将只读取该表,未指定时,系统将读取数据库下的全部表数据。InfluxDB 中,该参数用作 的值。MongoDB 中,该参数用作 的值。
以库的形式迁移数据时,无需填写该参数。以表的形式迁移数据时,该参数为必选字段。
 measurement collectionName

databases.tables.column

待读取数据的表的列。可配置为使用逗号( ,

)隔开的字符串或 Json 字符串。

databases.tables.querySql[]

自定义 SQL 查询语句集合。可使用 column

或 参数限定数据读取范围。如果同时设置 和 ,系统将优先使用 参数限定数据范围。
同步时序表时,数据列第一列必须为时间戳列。
 query_sql column query_sql query_sql

databases.tables.splitPk

可选字段。自定义的切分主键。

databases.tables.where

可选字段。自定义的 过滤条件,适用于增量数据迁移。 where

databases.tables.beginDateTime

指定数据读取起始时间,需与 、 等参数同用。源数据库为 KaiwuDB 或 InfluxDB 时为必选字段。如果已配置 参数,则无需设置此参数。 table column querySql

databases.tables.endDateTime

指定数据读取终止时间,需与 、 等参数同用。源数据库为 KaiwuDB 或 InfluxDB 时为必选字段。如果已配置 参数,则无需设置此参数。 table column querySql

databases.tables.splitIntervalS

可选字段。切分时间间隔。该参数只适用于 KaiwuDB 和 InfluxDB。

databases.tables.tsColumn

可选字段。指定时序表第一列(时间戳列),与 databases.tables.column

参数同效。源数据库为 KaiwuDB 时为必选字段。

databases.tables.mandatoryEncoding

可选字段。指定源端字符集类型,该参数只适用于 TDengine 。

databases.tables.query

可选字段。指定源端查询条件,该参数只适用于 MongoDB。


目标数据库(target)

下表列出目标数据库的相关配置参数。

参数

说明

type

必选字段。指定目标数据库类型,支持 KAIWUDB

 KAIWUDB1X

 MYSQL

 ORACLE

 POSTGRESQL

 CLICKHOUSE

 TDENGINE3X

 TDENGINE2X

和 )。 MONGODB

url

指定目标数据库的URL。使用 时,无需再指定 url host

和 。 port

host

指定目标数据库的 IP 地址。仅在未使用 参数时需要配置。 url

port

指定目标数据库的端口号。仅在未使用 参数时需要配置。 url

username

必选字段。目标数据库的用户名。

password

必选字段。目标数据库的用户密码。

databases.name

必选字段。目标数据库的名称,区分大小写。

databases.tables.name

待写入数据的表名。MongoDB 中,该参数用作 的值。
以库的形式迁移数据时,无需填写该参数。以表的形式迁移数据时,该参数为必选字段。
 collectionName

databases.tables.column

待写入数据的表的列,可以配置为使用逗号( )隔开的字符串或 Json 字符串。写入的列名数量和顺序必须与读取的列名数量和顺序保持一致。
以库的形式迁移数据时,无需填写该参数。以表的形式迁移数据时,该参数为必选字段。
 ,

databases.tables.writeMode

可选字段。数据写入模式,支持 、 insert UPSERT

,默认为 。 insert

databases.tables.preSql[]

可选字段。写入数据前要执行的 SQL 语句。该参数只适用于 KaiwuDB 和 TDengine。

databases.tables.postSql[]

可选字段。写入数据后要执行的 SQL 语句。该参数只适用于 KaiwuDB 和 TDengine。


迁移命令参数

从 KaiwuDB 2.2.0 版本开始,迁移命令不再支持 参数设置。如果需要设置 JVM 参数以增加内存,可以通过修改 DataX 配置文件来实现。 arguments

参数

说明

yamlPath

必选字段,配置文件的路径。

dataxPath

DataX 文件夹的路径,迁移业务数据时为必选字段。

python

已安装的 Python 版本,迁移业务数据时为必选字段。
支持以下设置:
- Python 2.x:
- Python 3.x:
 python python3

示例

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



参考链接: https://www.kaiwudb.com/kaiwudb_docs/#/db-migration/migration-senarios/migrate-mysql-to-kaiwudb.html#%E5%8D%95%E5%BA%93%E8%BF%81%E7%A7%BB%E5%85%83%E6%95%B0%E6%8D%AE




体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn