InnoDB/TokuDB/Myrocks引擎转换为X-Engine引擎

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

RDS MySQL 8.0支持X-Engine引擎,X-Engine可以提供更好的数据压缩能力,降低磁盘空间成本。本文介绍如何将InnoDB/TokuDB/Myrocks引擎转换为X-Engine引擎。

背景信息

X-Engine是阿里云自研的联机事务处理OLTP(On-Line Transaction Processing)数据库存储引擎。作为自研数据库PolarDB的存储引擎之一,X-Engine已经广泛应用在阿里集团内部诸多业务系统中,包括交易历史库、钉钉历史库等,大幅缩减了业务成本;同时也作为双十一大促的关键数据库技术,挺过了数百倍平时流量的冲击。

更多详情请参见:

说明

本文旨在指导您如何将存量InnoDB/TokuDB/Myrocks引擎转换为X-Engine引擎。如果是一个新业务,建议您在购买RDS MySQL 8.0实例时直接指定默认存储引擎为X-Engine,或建表语句指定engine=xengine。更多信息,请参见X-Engine引擎使用须知

注意事项

  • 如果原表为InnoDB引擎,转换前请确保实例的剩余磁盘空间是现有数据量的2倍。转换为X-Engine引擎后空间占用会减小至原数据大小的10%~50%。

  • 使用方案一进行转换时,需要更新配置参数并重启实例,请在停止业务之后进行操作。

  • 使用方案二进行全库迁移时,由于需要切换连接地址,请在业务低峰期进行操作。

  • 在转换线上业务引擎之前,请提前进行SQL兼容性测试,确认正常后再转换线上业务引擎。

  • 转换引擎后请修改实例参数default_storage_enginexengine,这样后续创建的表的引擎即为X-Engine。

方案建议

  • 实例为RDS MySQL 8.0(内核小版本20200229或以上)时,建议使用方案一,无需配置各种工具。

    说明

    内核小版本过低时,您可以在基本信息页面单击升级内核小版本按钮进行升级。如果没有该按钮,表示当前小版本已经是最新版。详情请参见升级内核小版本

  • 其他情况时(例如实例为MySQL 5.6/5.7),建议您使用方案二

方案一

此方案为修改参数模板启用X-Engine引擎,然后使用DDL语句转换引擎,最简单直接。在启用X-Engine引擎时,会重启实例,后续的转换引擎操作会短暂阻塞写入操作,不影响查询操作。

警告

此操作会重启实例,重启后会将95%的内存资源分配给X-Engine引擎使用,请不要混用InnoDB引擎。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏中单击参数设置

  3. 在左上角单击应用模板,选择MySQL_8.0_高可用系列_默认参数模板 | 系统默认 | X-Engine,然后单击确定

  4. 通过DMS登录RDS数据库

  5. SQLConsole执行如下命令进行转换:

    alter table <数据库名>.<表名> engine xengine;

    示例

    alter table test.sbtest1 engine xengine;

方案二

此方案为使用阿里云的数据传输服务DTS(Data Transmission Service)实时同步原表数据到新实例,然后将业务切换到新实例。

说明

通过DTS迁移数据时默认会继承源实例的引擎类型。所以需要先单独导出建表语句的SQL,修改Create语句中的引擎类型为X-Engine引擎. 然后再迁移数据到新建的X-Engine表中。

  1. 通过DMS登录原实例,导出原实例的所有表结构脚本。详细操作步骤请参见数据库导出

  2. 解压缩后修改表结构脚本,将InnoDB或TokuDB修改为xengine。下图以InnoDB修改为xengine为例进行说明,TokuDB修改方法相同。

    修改脚本
  3. 新购一个与原实例规格相同的RDS MySQL 8.0实例(购买时选择X-Engine参数模板)。

    说明

    快速创建RDS MySQL实例时,可以选择应用默认的X-Engine参数模板来设置X-Engine为默认存储引擎。

  4. 通过DMS登录新实例,将表结构脚本导入新实例。详细操作步骤请参见数据导入

  5. 参考MySQL实例间的双向同步将原实例的数据同步至新实例。

    重要

    在同步初始化时,请勿选择结构初始化

执行结果

同步完成后,您可以确认数据是否同步成功,并进行SQL兼容性测试,测试正常再转换线上业务引擎。