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

打印 上一主题 下一主题

主题 1994|帖子 1994|积分 5982

目录
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 默认是大小写敏感,可以在初始化数据库的时间进行修改。
  1. ./initdb -D /home/kingbase/Kingbase/ES/V9/data -U SYSTEM  --enable-ci
复制代码
3. 查询MySQL数据库编码方式
  1. show variables like 'character_set_database';
  2. 【KingbaseES初始化设置编码方式】
  3. --encoding=GBK(支持 GBK UNICODE ASCII)
复制代码
4. 查察表数据量大小 
查察当前用户在MySQL中的表大小,按从大到小排序(单位GB)
  1. select
  2. table_schema, table_name, table_rows, truncate(data_length/1024/1024, 2), truncate(index_length/1024/1024,2)
  3. from information_schema.tables
  4. where table_schema = 'mysql'
  5. order by data_length desc, index_length desc;
  6.   # TABLE_SCHEMA TABLE_NAME  TABLE_ROWS  truncate(data_length/1024/1024, 2)  truncate(index_length/1024/1024,2)
  7. mysql help_topic  817 1.51  0.09
  8. mysql help_keyword  938 0.12  0.12
  9. mysql help_relation 1723  0.09  0.00
  10. mysql innodb_index_stats  158 0.06  0.00
  11. mysql global_grants 47  0.04  0.00
  12. mysql proxies_priv  1 0.01  0.01
  13. mysql db  2 0.01  0.01
  14. mysql replication_asynchronous_connection_failover  0 0.01  0.01
  15. mysql procs_priv  0 0.01  0.01
  16. mysql help_category 53  0.01  0.01
  17. mysql replication_group_member_actions  2 0.01  0.01
  18. mysql tables_priv 2 0.01  0.01
  19. mysql engine_cost 2 0.01  0.00
  20. mysql func  0 0.01  0.00
  21. 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参数:
  1. TEST=# set sql_mode = 'ONLY_FULL_GROUP_BY';
  2. SET
  3. TEST=# show sql_mode;
  4.       sql_mode
  5. -----------------------------------
  6. ONLY_FULL_GROUP_BY
  7. (1 行记录)
复制代码
4.1.2 -> 移植数据库、用户

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

配置KingbaseES和MySQL的JDBC数据源,并设置相干的连接信息。
4.1.4 -> 配置目标库KingbaseES性能参数

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

  • 根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日记文件。
    开始迁移之前根据待迁移数据库的大小,包管KingbaseES数据目录地点位置有足够的空间。
  • 根据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 -> 实战中碰到的问题及办理方法


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


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



感谢各位大佬支持!!!

互三啦!!!




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表