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

目录

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.09
     mysql help_keyword  938 0.12  0.12
     mysql help_relation 1723  0.09  0.00
     mysql innodb_index_stats  158 0.06  0.00
     mysql global_grants 47  0.04  0.00
     mysql proxies_priv  1 0.01  0.01
     mysql db  2 0.01  0.01
     mysql replication_asynchronous_connection_failover  0 0.01  0.01
     mysql procs_priv  0 0.01  0.01
     mysql help_category 53  0.01  0.01
     mysql replication_group_member_actions  2 0.01  0.01
     mysql tables_priv 2 0.01  0.01
     mysql engine_cost 2 0.01  0.00
     mysql func  0 0.01  0.00
     mysql 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 数据库进行性能测试。测试指标包括响应时间、吞吐量、并发处理能力等。根据测试结果,对数据库进行进一步的优化,如调整参数配置、优化索引结构、优化查询语句等,确保数据库能够满足。

      感谢各位大佬支持!!!

      互三啦!!!

      评论 39
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值