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

背景信息

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

更多详情请参见:

注意事项

  • 如果原表为InnoDB引擎,转换前请确保实例的剩余磁盘空间是现有数据量的2倍。转换为X-Engine引擎后空间占用会减小至原数据大小的10%~50%。
  • 使用方案二进行全库迁移时,由于需要切换连接地址,请在业务低峰期进行操作。
  • 在转换线上业务引擎之前,请提前进行SQL兼容性测试,确认正常后再转换线上业务引擎。
  • 转换引擎后请修改实例参数default_storage_enginexengine,这样后续创建的表的引擎即为X-Engine。

方案建议

  • 实例满足如下条件时建议使用方案一,锁表时间短,而且无需配置各种工具。
    • 实例为RDS MySQL 8.0本地SSD盘。
    • 已支持X-Engine引擎(可以通过show engines确认是否支持X-Engine)。
      说明 如果没有X-Engine,您需要升级内核小版本
    • 单个表较小(100M以下)。
    • 业务可接受短时间阻塞。
  • 其他情况时(例如实例为MySQL 5.6/5.7),建议您使用方案二

方案一

此方案为直接转换引擎,但有所限制,会全程阻塞DML操作,且大表转换时间较长。

  1. 通过DMS登录RDS数据库
  2. 在页面上方选择SQL操作 > SQL窗口
  3. 执行如下命令进行转换:
    alter table <数据库名>.<表名> engine xengine;

    示例

    alter table test.sbtest1 engine xengine;

方案二

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

  1. 执行如下步骤导出原实例的所有表结构脚本。
    1. 通过DMS登录原实例
    2. 在页面上方选择数据方案 > 导出
    3. 选择新增导出任务 > 导出数据库
    4. 按下图设置导出数据库的所有表结构脚本,单击确定,在弹出的提示框中单击YES
      说明 弹出提示框是因为勾选了更多选项中的SQL脚本扩展选项,忽略即可。
      导出表结构
  2. 解压缩后修改表结构脚本,将InnoDB或TokuDB修改为xengine。
    修改脚本
  3. 新购一个与原实例规格相同的RDS MySQL 8.0实例(购买时选择X-Engine参数模板)。
    说明创建RDS MySQL实例时,可以选择应用默认的X-Engine参数模板来设置X-Engine为默认存储引擎。
  4. 执行如下步骤将表结构脚本导入新实例。
    1. 通过DMS登录新实例
    2. 在页面上方选择数据方案 > 导入
      导入
    3. 单击新增任务
    4. 按下图设置导入表结构脚本,单击开始
      导入脚本
      说明 导入成功后可以通过show create table <表名>;命令确认表引擎为X-Engine。确认表引擎
  5. 参考RDS MySQL实例间的单向同步将原实例的数据同步至新实例。
    警告 在同步初始化时,请勿勾选结构初始化

执行结果

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