| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(3. MySQL 数据库移植实战) -> 正文阅读 |
|
[大数据]金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(3. MySQL 数据库移植实战) |
3.?MySQL 数据库移植实战由于 KingbaseES 利用 KDTS-PLUS 等多种工具简化移植过程。 本节重点描述了在实际应用中移植一个 MySQL 数据库系统的完整过程,以及其中的主要移植内容、常用移植方法和关键移植步骤。 本章节包含以下内容:
3.1.?主要移植内容在实际应用中,一个 MySQL 数据库系统的移植主要包括如下内容。这些内容的迁移是存在先后顺序的。若违反该顺序,则可能导致迁移受阻。 根据迁移构成中业务是否可以停止服务,迁移又分为离线迁移和再线迁移。 3.1.1.?数据库、用户移植数据库是各种 SQL 和 PL/SQL 数据库对象的存放容器,而用户是这些对象的管理者和使用者。因此,在迁移数据库对象之前,一般应先迁移数据库、用户。 那么,如何移植这些内容呢?应在目的数据库 KingbaseES 上创建与源数据库 MySQL 同名的数据库、用户。 另外,所创建数据库的字符集应与 MySQL 数据库字符集一致。 3.1.2.?数据迁移支持在线迁移和离线迁移。 使用 KDTS-PLUS 将 MySQL 离线迁移到 KingbaseES 中。 使用 KFS 支持将 MySQL 在线迁移到 KingbaseES 中。 3.1.3.?应用程序移植在完成数据库对象迁移以后,才可开始迁移应用程序,主要原因是:在用程序中,可能会访问和操作前面迁移的数据库对象。 应用程序移植是指对 MySQL API 方式或嵌入式 SQL 方式的应用程序的移植。它主要包括接口驱动程序和连接方法的移植,以及 MySQL 扩展或私有的、且 KingbaseES 未兼容的 API 移植。通常,该项任务的工作量较少。 在实际应用中,通常应用程序移植与移植系统测试与调试交叉进行。 3.2.?关键移植步骤作为一个典型的项目过程,MySQL 数据库移植应具有健全的项目团队和全面细致的的项目执行过程。通常,移植一个 MySQL 数据库主要包括以下步骤:
这些步骤指之间的关系是:前四个步骤是迁移前的准备工作,这些准备工作是确保后续 MySQL 移植顺利进行的前提条件,而最后一步是保证最终移植系统正确性和可用性的关键步骤。 下面,分别对上述各个步骤进行详细说明。 3.2.1.?确定移植目标开始迁移前,应根据用户的实际需求,确定移植目标。这些目标诸如:
3.2.2.?评估移植任务明确移植目标以后,则可开始移植任务评估。 当计划把一个 MySQL 数据库系统移植到 KingbaseES 环境时,如果不做评估或评估不充分的话,那么整个移植工作会存在很多潜在风险,额外增加移植工程师的工作量并且无法确认移植完成时间。因此,移植前对移植的可行性、工作量、难易程度和工作进度等进行充分评估是非常必要的。 通常,移植评估主要包括以下内容:
在 MySQL 移植中常用的评估模板如下表所示: 表 3.2.23??移植评估的数据库 / 应用概况模板
表 3.2.24??移植评估的移植报告总结模板
表 3.2.25??移植评估的对象统计模板
表 3.2.26??移植评估的约束统计模板
表 3.2.27??移植评估的其它方面模板
3.2.3.?组建移植团队任何一个高效、成功的项目都应具备一个健全和良好的团队,MySQL 数据库移植也不例外。如果没有这样团队互相配合和支持,那么 MySQL 数据库移植将可能存在巨大的风险。所以,组建一个高效的移植团队是非常必要的。 那么,移植团队的组成人员应具备哪些条件呢?他们应至少具备以下的知识与技能:
由这些优秀人员组建的团队是高效移植 MySQL 数据库的可靠保障。 3.2.4.?准备迁移环境在上述步骤完成以后,移植工程师应开始准备迁移环境了,这些准备工作诸如: 3.2.4.1.?部署目的数据库服务器 部署目的数据库服务器应遵循以下原则:
3.2.4.2.?获取并安装必要的软件 迁移前应获取并安装如下软件:MySQL 数据库系统、KingbaseES 数据库系统、JDBC 和 ODBC 驱动程序、C 语言开发工具、TPC-C 测试工具、LoadRunner 等。 如果迁移数据规模较大,建议对安装的 KingbaseES 数据库服务器进行适当的优化,如增大 shared_buffer 大小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。 完成上述准备工作后,移植工程师便可开始 MySQL 数据库移植工作了。 3.2.5.?数据库用户迁移数据库、用户和模式迁移主要包括以下内容:
3.2.6.?数据迁移KingbaseES 数据迁移工具 KDTS-PLUS 动态加载待迁移的数据库访问接口,方便用户定制和使用。 KingbaseES 数据同步工具 KFS 支持同、异构数据源之间的数据迁移 同构数据源间数据迁移:支持 Kingbase V7 和 V8R3 到 KingbaseES V8.6 的数据迁移。 异构数据源之间的数据迁移:支持 MySQL5、MySQL8 到 KingbaseES V8.6 的数据前迁移。 KingbaseES 数据同步工具 KFS 支持结构迁移、支持全量数据迁移、支持列名映射,支持数据迁移过滤,在配置数据任务时,可以对迁移的表配置 where 条件、通过匹配的 where 条件过滤需要迁移的数据。 数据库迁移时需要按照用户需求确定在线迁移还是离线迁移,若是离线迁移,使用 KDTS-PLUS 完成 MySQL 的完整迁移; 若是在线迁移,目前支持使用 KFS 完成,注意这种情况下无法迁移 plsql 等复杂对象。 本节包括:
3.2.6.1.?迁移前准备 在使用 KDTS-PLUS 迁移 MySQL 数据库之前,应先做如下准备工作: 3.2.6.1.1.?获取 MySQL 数据库的相关信息 迁移前,应获取源数据库 MySQL 服务名及迁移的数据规模信息。
2. 大小写是否敏感
./initdb -D /home/kingbase/Kingbase/ES/V8/data -U SYSTEM --enable-ci 3. 查询 MySQL 数据库编码方式 show variables like 'character_set_database'; 【Kingbase初始化设置编码方式】 --encoding=GBK(支持 GBK UNICODE ASCII) 4. 查看表数据量大小
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. 检查数据库日期格式
3.2.6.1.2.?配置 KingbaseES 的 MySQL 兼容开关 根据实际情况,应对目的数据库 KingbaseES 进行适当的 MySQL 兼容配置。通常,应配置以下兼容参数:
2. sql_mode:兼容 MySQL 的模式列表。
3.2.6.1.3.?移植数据库、用户 在目的数据库 KingbaseES 上创建与源数据库 MySQL 同名的用户、数据库,并且授予新建用户具有使用该数据库和新建模式的所有或适当的权限。另外,所创建数据库的字符集应与 MySQL 数据库字符集一致。如果 KingbaseES 已有同名数据库,则登录该数据库后,只需创建同名用户。 3.2.6.1.4.?配置 JDBC 数据源 配置 KingbaseES 和 MySQL 的 JDBC 数据源,并设置相关的连接信息。 3.2.6.1.5.?配置目的库 KingbaseES 性能参数 为了提高迁移速度,应对目的库 KingbaseES 进行性能优化配置。 例如:
2. 根据 KingbaseES 服务器硬件配置的实际情况调整?shared_buffers?大小,默认是 128M,建议调整为内存的 1/4 大小。 3.2.6.2.?离线迁移 在完成上述准备工作以后,用户可使用 KDTS-PLUS 进行数据的离线迁移,KDTS-PLUS 提供了两种形态(BS、SHELL),用户可根据需要进行选择,以下章节将分别介绍 BS、SHELL 版本进行 mysql 迁移的具体步骤。 3.2.6.2.1.?BS 迁移步骤
3.2.6.2.2.?SHELL 迁移步骤
3.2.6.3.?在线迁移 在线迁移时,首先需要使用 KFS 完成。 具体参见 KFS 产品的 MYSQL 在线迁移指南。 3.2.6.4.?多次迁移 若项目开发过程中,需要定期从一个指定的源数据库迁移到目的数据库中, 那么根据迁移时源数据库和应用的状态,决定离线迁移还是在线迁移。 同时,由于是多次迁移,需要考虑每次迁移时数据库对象的定义是否需要迁移, 若不需要,则只迁移数据就可以,使用 KDTS-PLUS 和 KFS 都支持只迁移数据; 若每次迁移时需要迁移对象定义,则 1)比较源和目的对象定义是否发生变更 2)对于定义发生变更的表,选择迁移定义和数据 3)对于定义没有发生变更的表,只同步数据即可。 3.2.7.?应用程序迁移在应用编程接口方面,KingbaseES 与 MySQL 兼容程度较高,所以,一般情况下,应用程序迁移比较容易。应用程序迁移通常应和移植系统测试同时进行。这样可及时修改测试过程中发现的问题。 3.2.7.1.?概述 如何在一个应用程序中访问和操纵数据库呢?通常,可采用以下方式: 3.2.7.1.1.?API 方式 该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如 JDBC 和 ODBC 等。目前,大多数数据库厂商均提供很多标准的数据库 API 及其驱动程序。 在实际应用中,应首先加载驱动程序。加载成功后,利用 API 函数与数据库交互并完成对数据库数据的操作。 详细参考 《客户端编程接口》。 3.2.7.1.1.1.?JDBC
其它问题请参考 《JDBC 指南》 3.2.7.1.1.2.?Hibernate
3.2.7.1.1.3.?MyBatis 目前 Mybatis3.2.8,Mybatis3.3.0 和 Mybatis3.4.5 均已通过 KingbaseES V8.6 版本适配的验证测试 MyBatis 的 jar 包可以从官方网站下载,Mybatis 所以使用的 JDBC 包 kingbase8-8.2.0.jar 位于 $KINGBASE_HOME/jdbc 目录下。使用时将 Mybatis 包和 JDBC 包导入到项目的 Libraries 中并定义相关配置项即可。 定义 Mybatis 配置文件,跟据用户选择,更改一下配置文件。 在 config.xml 中配置 JDBC 的驱动信息参数,数据库服务器信息参数和登陆用户信息参数。当然,这些参数也可以根据用户应用需求,单独生成 property 文件,针对不用的应用场景,导入不同的属性文件。这里以 property 为例说明下 config.xml 的配置使用。 在 property 中增加如下声明: jdbc.driverClassName=com.kingbase8.Driver jdbc.url=jdbc:kingbase8://192.168.229.128:54322/TEST jdbc.username=登录名 jdbc.password=登录密码 在config.xml 中增加如下声明: <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> 具体使用样例请参考 《MyBatis 指南》 或者 MyBatis 官网 http://www.mybatis.org/mybatis-3/zh/index.html 3.2.7.2.?修改应用框架 如果应用使用的框架支持多种数据库和各自方言,修改配置使得框架使用 postgresql 库及其方言。 分享【教育部语言文字系统 - 应用迁移】: 未修改之前框架适配使用的是 MySQL 的方言和表结构,其中用到了 BLOB/CLOB。 经调研框架也支持其他库,例如 MySQL 和 postgresql,除 MySQL 外,类型均为 bytea/binary,目前解决方法是配置框架使用 postgresql 库及其方言。 具体修改:
3.2.8.?测试与调试移植系统任何一个成熟的应用系统如果代码、尤其是关键代码变动后,则应进行全面细致的测试。类似的,更换新的后台数据库系统以后,也应对移植后的数据库系统进行全面的功能和性能测试。 3.2.8.1.?功能测试和排错 功能测试是指对移植数据库系统的每一个模块和功能进行全面的系统回归测试,用以确保新系统各个功能的正确性。 因此,完成数据库对象和应用程序迁移后,应对移植系统进行全面的功能测试,并对测出问题及时分析、排查和修改。对那些很难定位的问题,请及时联系 KingbaseES 支持工程师。 3.2.8.2.?性能测试和调优 移植系统性能测试和调优是在完成移植系统功能测试后和系统上线前,在实际或模拟生产数据上,对移植系统进行的性能测试和调优。 移植系统性能测试和调优的主要步骤如下:
通常,性能测试效果与测试数据规模、软硬件配置等因素密切相关。因此,建议性能测试时,测试数据规模、软硬件配置应尽量与将来的实际生产环境一致。必要时,在未来一年、两年、五年等不同模拟数据规模场景下,应分别测试移植系统的性能指标,用以保证移植系统未来仍能具有良好的性能表现。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:14:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |