【金仓数据库征文】MySQL 与 KingbaseES 的华丽转身:揭秘迁移路上的最佳实践秘籍

article/2025/6/19 4:50:28

目录

1 -> 概述

1.1 -> MySQL兼容特性

1.2 -> 数据类型

2 -> 主要移植内容

2.1 -> 数据库、用户移植

2.2 -> MySQL数据迁移

2.3 -> 应用程序移植

3 -> 关键移植步骤

4 -> MySQL数据库移植实战

4.1 -> 迁移前准备

4.1.1 -> 配置 KingbaseES 的MySQL兼容开关

4.1.2 -> 移植数据库、用户

4.1.3 -> 配置JDBC数据源

4.1.4 -> 配置目的库KingbaseES性能参数

4.2 -> 离线迁移

4.2.1 -> BS 迁移步骤

4.3 -> 在线迁移

4.4 -> 多次迁移

5 -> 总结

5.1 -> 实战中遇到的问题及解决方法

5.2 -> 迁移后的验证与优化


1 -> 概述

1.1 -> MySQL兼容特性

通常,异构数据库移植的工作量繁重。这些工作量主要来源于:在数据类型、SQL 语言、PL/SQL 语言、甚至客户端应用编程接口等诸多方面对两个数据库所进行的、大量的语法或功能的对齐处理。

同样的,从 MySQL 向 KingbasES 移植的情况也如此。为降低移植工作量,KingbaseES 在其内部实现了部分的 MySQL 兼容特性。这些特性从语法或功能上对 MySQL 提供了原生支持。因此,在移植过程中,MySQL 程序只需很少甚至不做任何改动就能在 KingbaseES 环境中运行。

此外,对未提供原生支持的 MySQL功能,KingbaseES 也给出了相应的移植建议。

1.2 -> 数据类型

数据类型是描述数据库系统底层信息资源模式的常用手段。通常,两个数据库系统数据类型的兼容好坏直接影响移植的难易程度。KingbaseES 对 MySQL的基本数据类型如数值类型(整型、浮点型、定点数类型)、文本字符串类型(CHAR、VARCHAR、TINYTEXT、MEDIUMTEXT、LONGTEXT)、位类型、日期时间类型(YEAR、TIME、DATE、DATETIME、TIMESTAMP)、枚举类型ENUM、集合类型SET、二进制类型(BINARY、VARBINARY、BLOB)、空间类型(GEOMETRY、POINT、LINESTRING、POLYGON)、JSON类型(JSON对象、JSON数组)可以原生支持,或者通过转换进行支持。

支持MySQL 所有操作符,以及数据类型转换。

2 -> 主要移植内容

在实际应用中,一个MySQL数据库系统的移植主要包括如下内容。这些内容的迁移是存在先后顺序的。若违反该顺序,则可能导致迁移受阻。

根据迁移构成中业务是否可以停止服务,迁移又分为离线迁移和在线迁移。

2.1 -> 数据库、用户移植

数据库是各种 SQL 和 PL/SQL 数据库对象的存放容器,而用户是这些对象的管理者和使用者。因此,在迁移数据库对象之前,一般应先迁移数据库、用户。

那么,如何移植这些内容呢?应在目的数据库 KingbaseES 上创建与源数据库 MySQL同名的数据库、用户。

另外,所创建数据库的字符集应与 MySQL数据库字符集一致。

2.2 -> MySQL数据迁移

支持在线迁移和离线迁移。

使用 KDTS 将 MySQL 离线迁移到 KingbaseES 中。

使用 KFS 支持将 MySQL 在线迁移到KingbaseES 中。

2.3 -> 应用程序移植

在完成数据库对象迁移以后,才可开始迁移应用程序,主要原因是:在用程序中,可能会访问和操作前面迁移的数据库对象。

应用程序移植是指对 MySQL API 方式或嵌入式 SQL 方式的应用程序的移植。它主要包括接口驱动程序和连接方法的移植,以及 MySQL扩展或私有的、且 KingbaseES 未兼容的 API 移植。通常,该项任务的工作量较少。

在实际应用中,通常应用程序移植与移植系统测试与调试交叉进行。

3 -> 关键移植步骤

作为一个典型的项目过程,MySQL数据库移植应具有健全的项目团队和全面细致的的项目执行过程。通常,移植一个 MySQL数据库主要包括以下步骤:

  • 确定移植目标

  • 评估移植任务

  • 组建移植团队

  • 准备迁移环境

  • 数据库用户迁移

  • 数据迁移

  • 应用程序迁移

  • 测试与调试移植系统

这些步骤指之间的关系是:前四个步骤是迁移前的准备工作,这些准备工作是确保后续MySQL移植顺利进行的前提条件,而最后一步是保证最终移植系统正确性和可用性的关键步骤。

4 -> MySQL数据库移植实战

4.1 -> 迁移前准备

迁移前,应获取源数据库MySQL服务名及迁移的数据规模信息。

1. 数据库、用户和模式迁移主要包括以下内容:

获取源 MySQL数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息。

在目的 KingbaseES 数据库上,使用 KSQL 工具上执行如下操作:

创建与源 MySQL 用户同名的用户,用户root。

创建与源 MySQL 同名的数据库,mysql。

创建与源 MySQL 同名的模式。如果通过查询分析器或 KSQL 工具创建同名用户,则省略此步。但是,如果通过企业管理器创建同名用户,则此步则不能省略。

2. 大小写是否敏感

MySQL通常默认是大小写不敏感,而 KingbaseES 默认是大小写敏感,可以在初始化数据库的时候进行修改。

./initdb -D /home/kingbase/Kingbase/ES/V9/data -U SYSTEM  --enable-ci

    3. 查询MySQL数据库编码方式

     show variables like 'character_set_database';【KingbaseES初始化设置编码方式】--encoding=GBK(支持 GBK UNICODE ASCII)

    4. 查看表数据量大小 

    查看当前用户在MySQL中的表大小,按从大到小排序(单位GB)

    select
    table_schema, table_name, table_rows, truncate(data_length/1024/1024, 2), truncate(index_length/1024/1024,2)
    from information_schema.tables
    where table_schema = 'mysql'
    order by data_length desc, index_length desc;# TABLE_SCHEMA TABLE_NAME  TABLE_ROWS  truncate(data_length/1024/1024, 2)  truncate(index_length/1024/1024,2)mysql help_topic  817 1.51  0.09mysql help_keyword  938 0.12  0.12mysql help_relation 1723  0.09  0.00mysql innodb_index_stats  158 0.06  0.00mysql global_grants 47  0.04  0.00mysql proxies_priv  1 0.01  0.01mysql db  2 0.01  0.01mysql replication_asynchronous_connection_failover  0 0.01  0.01mysql procs_priv  0 0.01  0.01mysql help_category 53  0.01  0.01mysql replication_group_member_actions  2 0.01  0.01mysql tables_priv 2 0.01  0.01mysql engine_cost 2 0.01  0.00mysql func  0 0.01  0.00mysql gtid_executed 0 0.01  0.00

    5. 检查数据库日期格式 

      MySQL数据库中date的默认格式为“YYYY-MM-DD”,time的默认格式为“HH:MM:SS”

      KES中时间的默认格式为:ISO,YMD

      MySQL数据库中有日期“0099-09-30 00:00:00”,KingbaseES中将99识别为月份报错:

      ERROR: date/time field value out of range

      4.1.1 -> 配置 KingbaseES 的MySQL兼容开关

      根据实际情况,应对目的数据库KingbaseES进行适当的MySQL兼容配置。通常,应配置以下兼容参数:

      1. mysql_interval_style :兼容MySQL的interval格式。

      在KingbaseES系统参数 mysql_interval_style 的默认值为off。

      2. sql_mode :兼容MySQL的模式列表。

      在KingbaseES系统参数 sql_mode 可以设置为:

      • ONLY_FULL_GROUP_BY :如果查询的select列表、HAVING条件或ORDER BY列表,引用了既不在GROUP BY子句中命名,也不再功能上依赖于GROUP_BY列的非聚合列,则拒绝这些查询;

      • STRICT_ALL_TABLES :为所有存储引擎启用严格SQL模式,无效的数据值将被拒绝;

      • REAL_AS_FLOAT :REAL类型默认是FLOAT8,开启之后为FLOAT4;

      • NO_AUTO_VALUE_ON_ZERO :开启时,插入0序列不自增,将0作为最终插入的值;

      • ANSI_QUOTES :表示双引号返回标示符。如果用户取消该选项,则表示双引号返回字符常量。注意:若取消该模式,将会导致Studio工具新建、删除对象失败。

      可以用如下方式使用sql_mode参数:

      TEST=# set sql_mode = 'ONLY_FULL_GROUP_BY';
      SET
      TEST=# show sql_mode;sql_mode
      -----------------------------------
      ONLY_FULL_GROUP_BY
      (1 行记录)

      4.1.2 -> 移植数据库、用户

      在目的数据库KingbaseES上创建与源数据库MySQL同名的用户、数据库,并且授予新建用户具有使用该数据库和新建模式的所有或适当的权限。另外,所创建数据库的字符集应与MySQL数据库字符集一致。如果KingbaseES已有同名数据库,则登录该数据库后,只需创建同名用户。

      4.1.3 -> 配置JDBC数据源

      配置KingbaseES和MySQL的JDBC数据源,并设置相关的连接信息。

      4.1.4 -> 配置目的库KingbaseES性能参数

      为了提高迁移速度,应对目的库KingbaseES进行性能优化配置。

      如:

      1. 根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日志文件。

        开始迁移之前根据待迁移数据库的大小,保证KingbaseES数据目录所在位置有足够的空间。

      2. 根据KingbaseES服务器硬件配置的实际情况调整 shared_buffers 大小,默认是128M,建议调整为内存的1/4大小。

      4.2 -> 离线迁移

      在完成上述准备工作以后,用户可使用 KDTS 进行数据的离线迁移,KDTS 提供了两种形态(BS、SHELL),可根据需要进行选择。

      4.2.1 -> BS 迁移步骤

      • 创建源数据库连接

      创建源库数据库连接。创建数据库连接界面如下,填写数据源信息,包括: “连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数” 

      • 创建目标数据库连接

      创建目标数据库连接。创建数据库连接界面如下,填写数据源信息,包括: “连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数” 

      • 新建迁移任务

      KDTS 采用向导页的方式指导用户新建迁移任务,简单易用,用户依次配置“选择数据源”-“选择模式”-“选择迁移对象”-“配置参数”,即可快速配置一个迁移任务。

      1. 选择数据源

              填写自定义任务名称(任务名称不能重复),选择“源数据库”和“目标数据库”,或者选择“新建数据源”后使用。

      2. 选择模式

              根据数据迁移所需选择对应模式(如需选择模式在系统模式中可选中“包含系统模式”复选框)的表结构、表数据、视图、序列、函数、存储过程、程序包、同义词、自定义类型等。当模式较多时也可以通过左上方的查询框进行检索。请您至少选择一种模式,否则将收到错误提示,以至于不能完成新建任务。

      3. 选择迁移对象

      通过已选模式选择需要迁移数据的表,模式较多时可在已选模式搜索框内输入模式名关键字进行快速检索。

      可迁移此模式下全部表,也可以指定或排除部份表,当选择“包含指定对象”或“排除指定对象”时,请您通过“从列表选择”或“从文件导入”将数据添加到包含列表中,如您未添加数据,则会收到错误提示,导致无法完成新建任务。

      从列表选择对象时,可选择对应模式、检索对象名关键字进行快速检索对象。点击“添加”按钮后加入到已选列表,想要移除部份表时可以选择对应的表点击“移除”按钮取消表。选择完成后点击确定。

      4. 配置参数

      迁移工具提供了一系列配置参数用于迁移方案的个性化配置,满足多种迁移场景。配置参数分为“迁移配置”、“数据类型映射”、“线程配置”三个方面。

      • 执行迁移任务

      可将此任务作为预迁移任务点击“保存”,或者作为执行任务点击“保存并迁移”。

      • 迁移完成:

      迁移结束“状态”栏显示“完成”,则迁移任务成功。

      • 迁移失败:

      迁移结束“状态”栏显示“失败”,则迁移任务失败。失败后可点击详情查看日志有助于解决问题。

      • 查看迁移报告及问题处理

      迁移完成后,需要确认执行结果,包括迁移数据量,是否有错误发生,可以通过迁移日志和迁移结果进行查看。

      “迁移日志”打印迁移任务执行后的日志,具体可分为“系统日志”、“Error日志”、“Info日志”。

      “迁移结果”功能的工作区包括“任务执行批次”、“迁移对象”、“总数”、“成功数”、“失败数”、“略过数”、“操作”。您可以查看历史迁移任务执行的每次记录,以及每次迁移的对象、成功数、失败数、查看失败任务的错误日志。

      4.3 -> 在线迁移

      在线迁移时,首先需要使用 KFS 完成。

      4.4 -> 多次迁移

      若项目开发过程中,需要定期从一个指定的源数据库迁移到目的数据库中,那么根据迁移时源数据库和应用的状态,决定离线迁移还是在线迁移。

      同时,由于是多次迁移,需要考虑每次迁移时数据库对象的定义是否需要迁移,若不需要,则只迁移数据就可以,使用 KDTS 和 KFS 都支持只迁移数据;若每次迁移时需要迁移对象定义,则 1)比较源和目的对象定义是否发生变更 2)对于定义发生变更的表,选择迁移定义和数据 3)对于定义没有发生变更的表,只同步数据即可。

      5 -> 总结

      在数字化转型的浪潮中,数据库迁移成为众多企业优化数据管理架构的关键环节。MySQL 作为广泛使用的开源数据库,随着业务发展,部分企业因性能提升、自主可控等需求,选择迁移至国产的 KingbaseES 数据库。本次实战总结将详细阐述从 MySQL 至 KingbaseES 迁移过程中的关键步骤、遇到的问题及解决方法,为有相同需求的从业者提供宝贵经验。

      5.1 -> 实战中遇到的问题及解决方法

      1. 数据一致性问题:在迁移过程中,可能会出现数据一致性问题,如部分数据丢失或数据不一致。这通常是由于数据传输过程中的网络故障或数据类型转换错误导致的。解决方法是在迁移前进行充分的测试,使用校验工具对比源数据库和目标数据库的数据一致性。一旦发现数据不一致,及时排查原因,可能需要重新进行数据迁移或手动修复数据。
      2. 存储过程和函数兼容性问题:MySQL 和 KingbaseES 的存储过程和函数在语法和实现上存在差异。在迁移存储过程和函数时,可能会遇到编译错误或执行结果不一致的情况。解决这一问题需要深入研究两种数据库的存储过程和函数语法,对迁移后的代码进行仔细调试和优化。可以借助 KingbaseES 的调试工具,逐步排查错误,确保存储过程和函数在新环境中的正常运行。
      3. 性能优化问题:迁移完成后,可能会出现性能下降的情况。这可能是由于索引策略、查询优化等方面的差异导致的。针对这一问题,需要对 KingbaseES 的性能进行全面优化。例如,根据业务查询的特点,合理创建索引;对复杂查询进行优化,调整查询语句的执行计划等。同时,利用 KingbaseES 提供的性能监控工具,实时监测数据库的性能指标,及时发现并解决性能瓶颈问题。

      5.2 -> 迁移后的验证与优化

      1. 功能验证:迁移完成后,对应用系统进行全面的功能测试,确保所有业务功能正常运行。测试过程中要涵盖各种业务场景,包括数据的增删改查、事务处理、报表生成等功能。发现问题及时排查原因,可能需要对代码或数据库配置进行进一步调整。
      2. 性能测试:使用专业的性能测试工具,对迁移后的 KingbaseES 数据库进行性能测试。测试指标包括响应时间、吞吐量、并发处理能力等。根据测试结果,对数据库进行进一步的优化,如调整参数配置、优化索引结构、优化查询语句等,确保数据库能够满足。

      感谢各位大佬支持!!!

      互三啦!!!


      http://www.hkcw.cn/article/bNBuMgKlVE.shtml

      相关文章

      【金仓数据库征文】金仓数据库KingbaseES: 技术优势与实践指南(包含安装)

      目录 前言 引言 一 : 关于KingbaseES,他有那些优势呢? 核心特性 典型应用场景 政务信息化 金融核心系统: 能源通信行业: 企业级信息系统: 二: 下载安装KingbaseES 三:目录一览表: 四:常用SQL语句 创建表: 修改表结构…

      【金仓数据库征文】- 深耕国产数据库优化,筑牢用户体验新高度

      目录 引言 一、性能优化:突破数据处理极限,提升运行效率 1.1 智能查询优化器:精准优化数据检索路径 1.2 并行处理技术:充分释放多核计算潜力 1.3 智能缓存机制:加速数据访问速度 二、稳定性提升:筑牢…

      Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解

      目录 1、前言: 2、数据库搭建 : 建表语句: 3、后端实现,将图片存储进数据库: 思想: 找到图片位置(如下图操作) 图片转为Fileinputstream流的工具类(可直接copy&#…

      乌方披露对俄特种作战行动细节 41架俄军战机被击中

      当地时间6月2日,乌克兰国家安全局局长瓦西里马柳克宣布,乌克兰国家安全局在代号为“蛛网”的特别行动中袭击了俄罗斯后方部署战机的四个军用机场。此次行动导致41架俄军战机被击中,其中包括A-50、图-95、图-22M3和图-160战机。他表示,这次行动摧毁了俄罗斯34%的战略巡航导弹…

      日本人在华被杀害 日本政府发声 商业纠纷引发

      6月3日,大连公安发布公告称,5月23日在辽宁大连发生一起因商业纠纷引发的命案,两名日本籍男子被一名中国籍男子杀害。日本政府相关人士表示,此案属于个案,不存在“反日”等背景因素。大连警方在警情通报中提到,5月23日接到报警,在普兰店区大刘家街道辖内发生一起致两人死…

      免签名单不断变长彰显中国对外开放决心 持续优化入境政策

      6月3日,外交部发言人林剑主持例行记者会。有记者提问关于中方近期推出的签证便利政策,包括面向东南亚国家的东盟签证便利政策以及从6月1日起对巴西、阿根廷、秘鲁、乌拉圭等五个拉美国家持普通护照人员试行免签政策。此外,中国还宣布实现对海合会国家免签全覆盖,这一系列措…

      全国多地上调最低工资标准 覆盖数千万劳动者

      2025年上半年,全国多地密集上调最低工资标准,成为民生领域的一大亮点。截至5月29日,已有重庆、四川、山西、广东等8个省份正式实施新标准,覆盖数千万劳动者。最低工资标准通常分为月最低工资标准和小时最低工资标准两种形式,前者适用于全日制就业劳动者,后者适用于非全日…

      日本政府回应2名日本人被杀害 排除反日背景

      大连公安于6月3日发布公告称,5月23日,因商业纠纷引发矛盾,两名日本籍男子在辽宁大连被一名中国籍男子杀害。日本政府相关人士表示,该案属于个案,不存在“反日”等背景因素。大连警方通报显示,5月23日,在普兰店区大刘家街道辖内发生一起致2人死亡的刑事案件。次日,犯罪嫌…

      胡歌新身份正式官宣 担任上海市禁毒宣传大使

      胡歌宣布了新身份。他不仅是镜头前演绎百态人生的演员,也是镜头后用清醒守护生命本色的禁毒宣传大使。在禁毒宣传公益片《面对毒品,请坚决说不!》中,中共上海市委政法委常务副书记、市禁毒委副主任张磊为胡歌颁发了上海市禁毒宣传大使聘书。毒品是人生剧本中最危险的“NG镜…

      深度探索AI | 智算云平台与DeepSeek 的多元联动应用与模型微调全解析

      文章目录 前言一、DeepSeek满血版使用2.1 关于蓝耘2.2 注册与登录2.3 使用DeepSeek 二、DeepSeek 基础概念回顾2.1 DeepSeek 模型架构概述2.2 DeepSeek 的预训练优势 三、DeepSeek 在自然语言处理领域的联动应用3.1 智能客服系统集成3.1.1 应用场景与优势3.1.2 实现流程与代码示…

      本地部署vanna ai+通过http请求调用vanna

      本地部署vanna ai ① 准备python环境,推荐最新的python12、13版本 ② 安装vanna库 我这里安装的python环境是python312 进入目录python312/Scripts,在该目录下的命令行窗口中输入以下命令:pip jinstall vanna pip install vanna③ 配置向…

      和 AI 玩海龟汤差点崩溃:它永远比我多知道 100 个隐藏真相

      关于海龟汤 第一次接触海龟汤时,我还以为这是某种美食烹饪挑战,直到朋友抛出第一个谜题 ——“一个人走进酒吧,要了一杯水,酒保却掏出一把枪对准他,可这个人不仅没害怕,反而说了声谢谢离开了”&#xff0c…

      个人健康中枢的多元化AI软件革新与精准健康路径探析

      引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…

      探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评

      随着边缘计算和人工智能技术的迅速发展,性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件,凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力,引起了广泛关注。本文将从配置性…

      利用本地DeepSeek R1和n8n框架,创建AI智能体

      如今,AI 越来越智能。在本地部署个人 AI 智能体,是一件意义重大的事:无需云服务和 API,就能完全自主掌控私人 AI,保障数据安全和隐私,还能个性化定制。 借助n8n、Ollama和DeepSeek-R1这三款超实用工具&…

      【AI打标签】基于DeepSeek Janus为图片批量打标签

      DeepSeek Janus的能力,相信不需要我多说了,看下面三张图片,自然就知道了。 但是,如何通过DeepSeek Janus提高我们的工作生产力,在这里,我给大家说道说道。 ★★★★★ 建议一定看到最后,至于为…

      SpringAI+MCP协议 实战

      文章目录 前言Spring AIMcp(Model Context Protocol) 快速实战Spring AISpring AI 集成 MCP 协议Spring Mcp Client 示例Spring Mcp Server 示例 前言 大模型发展可能到了接近成熟的程度了,但是业界的重点肯定不会仅仅就放在大模型上的&…

      AI+游戏开发:如何用 DeepSeek 打造高性能贪吃蛇游戏

      文章目录 一、技术选型与准备1.1 传统开发 vs AI生成1.2 环境搭建与工具选择1.3 DeepSeek API 初步体验 二、贪吃蛇游戏基础实现2.1 游戏结构设计2.2 初始化游戏2.3 DeepSeek 生成核心逻辑 三、游戏功能扩展3.1 多人联机模式3.2 游戏难度动态调整3.3 游戏本地保存与回放3.4 跨平…

      AI智能体|扣子(Coze)全网最详细讲解(保姆级)

      没有任何编程基础?没关系! 这篇保姆级教程将手把手教你用Coze平台打造能搜索新闻、分析数据、创作内容的AI智能体,让你的工作效率提升300%。从此告别加班,让AI成为你最强力的工作伙伴! 什么是AI智能体?一个…

      国足备战世预赛生死战 力争两连胜

      中国男足国家队于6月2日晚抵达印度尼西亚首都雅加达,准备参加5日举行的2026美加墨世界杯亚洲区预选赛18强赛第9轮对阵印尼队的比赛。当地时间晚上10时30分,中国队在主教练伊万科维奇的带领下走出雅加达苏加诺-哈达国际机场,随后登上大巴前往酒店。伊万科维奇表示,中国队在…