本文为您介绍如何将PolarDB-X原本的InnoDB引擎转换为X-Engine引擎。
背景信息
目前有较多RDS存量用户想要使用X-Engine,这些用户使用数据库有如下特点:
- 实例版本大多为MySQL 5.6或5.7,MySQL 8.0较少。
- 单实例数据量比较大,达到实例规格所能支持的磁盘空间上限(例如4核8GB的规格最大支持2TB的本地盘)。
- 同时使用PolarDB-X,特别是部分客户使用的是较老版本的PolarDB-X,或者做过一些定制功能(例如SQL透传)。
针对用户的需求,阿里云提供PolarDB-X的转换方案,如果您的业务也需要将PolarDB-X中的InnoDB转换为X-Engine,可以参见本文进行操作。
说明 X-Engine的详细介绍请参见X-Engine简介。
切换方案
由于MySQL 8.0使用InnoDB引擎或X-Engine引擎时,在对外接口和使用体验上是相同的,因此在PolarDB-X升级完之后,可以对底层RDS实例进行逐步转换,例如PolarDB-X下面挂载了8个RDS实例,可以先将其中1个RDS实例的引擎转换为X-Engine,运行一段时间,确认没有兼容性和性能问题之后,再转换剩下的7个实例。
转换前验证空间压缩效率
在开始使用X-Engine之前,建议购买一个同规格的X-Engine引擎实例,并通过阿里云DTS服务导入原InnoDB引擎实例的数据,查看空间压缩效率。空间压缩的结果可以为以下两方面提供参考:
- 实例存储空间
根据空间压缩效率,可以确定转换为X-Engine之后所需购买的实例规格, 例如如果空间占用压缩到原有的30%以下, 则原来购买3TB磁盘空间的实例可以转换为使用1TB磁盘空间的X-Engine实例,或者可以使用相同规格的实例,为未来业务发展留下更多存储空间。
- 数据库分片数
存储空间降低后,可以考虑减少数据库分片数,例如将原来分布在多个实例上的数据库,合并到同一个实例上,大幅降低成本。
说明 X-Engine引擎实例验证完之后可以释放,也可以清空数据以供正式转换时使用。
转换流程
- 升级PolarDB-X,确保版本号高于v5.4.2-15744202。
- 选定一个RDS分库实例(InnoDB引擎)作为首个切换的实例,将建表语句导出后修改引擎类型为X-Engine,然后创建所需规格的X-Engine引擎实例,或直接使用验证空间压缩效率时创建的实例,将表结构脚本导入新实例。
- 创建实例请参见创建RDS MySQL实例。
- 导出和导入建表语句请参见InnoDB/TokuDB/Myrocks引擎转换为X-Engine引擎方案二。
说明 通过DTS迁移数据时默认会继承源实例的引擎类型。所以需要先单独导出建表语句的SQL,修改Create语句中的引擎类型为X-Engine引擎. 然后再迁移数据到新建的X-Engine表中。 - 通过DTS功能将RDS分库实例(InnoDB引擎)的数据同步至X-Engine引擎的RDS实例中,等待数据同步。数据同步请参见MySQL实例间的双向同步。说明 您可以使用DTS的双向同步功能保证两个实例的数据一致。
- 修改PolarDB-X路由规则,将RDS分库实例(InnoDB引擎)上的访问切换到X-Engine引擎实例上。说明 维持首个X-Engine引擎实例在线上运行5天时间,持续监控实例,重点观察请求的处理耗时和异常信息等,同时注意双向同步的同步情况,确保在过程中出现问题时,可以切换回原有的RDS分库实例(InnoDB引擎)。查看引擎监控请参见查看监控信息。
- 首个X-Engine引擎实例运行没有问题之后,可以切换剩下30%~50%的实例,然后继续观察3~5天。流程请参照之前的2~4步。说明 原有RDS分库实例(InnoDB引擎)不要释放或下线,并且每一个RDS分库实例(InnoDB引擎)都需要使用DTS与对应X-Engine实例做双向同步。
- 切换剩下的所有实例,整个集群切换完成之后继续观察3~5天,之后根据业务运行情况,可以释放所有的DTS同步链路,同时释放原有的RDS分库实例(InnoDB引擎)。