通过无锁变更工单实现无锁结构变更

为解决变更数据库表结构时的锁表问题,数据管理DMS推出了无锁结构变更功能,该功能可以较好地规避因锁表以致于阻塞业务和数据库原生OnlineDDL带来的主备延迟问题。本文介绍通过提交无锁变更工单实现数据库无锁结构变更的方法。

前提条件

  • 数据库类型仅支持RDS MySQLPolarDB MySQL版MyBase MySQL或其他来源MySQL。不支持PolarDB分布式版(包含PolarDB-X 1.0和PolarDB-X 2.0)、RDS PostgreSQL等其他非MySQL数据库使用DMS的无锁结构变更功能。

    说明

    其他来源是指来自其他云厂商或自建的数据库。

  • 数据库引擎为InnoDB、Rocksdb、X-Engine。

  • 数据库已开启Binlog日志。

    说明

    PolarDB MySQL版默认未开启Binlog。开启Binlog操作,请参见开启Binlog

  • 实例的管控模式为稳定变更或安全协同。更多信息,请参见查看管控模式

  • 实例已开启无锁结构变更。具体操作,请参见开启无锁结构变更

注意事项

  • 使用具备读写权限的数据库账号或高权限数据库账号。如果当前数据库账号权限不足,您可以:

    • 授权数据库账号权限。更多信息,请参见MySQL数据库账号权限管理

      说明

      为数据库账号添加ALL PRIVILEGES权限或以下读写权限:

      ALTER、CREATE、DELETE、DROP、INDEX、INSERT、LOCK TABLES、SELECT、TRIGGER、UPDATE、REPLICATION CLIENT和REPLICATION SLAVE权限。

    • 更换数据库账号。更多信息,请参见编辑实例

  • 确保数据库磁盘空间充足:由于需要在目标数据库中新建临时表用于数据拷贝,请确保磁盘剩余空间为目标表的两倍以上,磁盘空间不足将导致实例被锁定。更多信息,请参见数据库性能

  • 目标表中有主键或唯一键:在执行无锁结构变更时,主键或唯一键用于全量拷表分段操作及后续增量更新。

    说明

    如果目标表中仅有主键或唯一键,在执行结构变更期间更新主键或唯一键,将导致任务执行失败。

  • 目标表名的长度不能超过56个字符。

操作步骤

说明

如下操作以稳定变更模式的实例进行举例。若您选择安全协同模式的实例,还会出现原因类别执行方式等参数。参数的详细信息,请参见操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 无锁变更

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 数据库开发 > 数据变更 > 无锁变更

  3. 配置无锁变更工单。

    参数名

    说明

    数据库

    搜索并选择目标数据库,支持选择多个目标数据库。

    • 有权限:只能搜索并选择有变更权限的数据库。

    • 全部:可以搜索并选择所有的数据库(除开启元数据访问控制的数据库)。

      说明

      如果您没有目标数据库的变更权限,请在顶部菜单栏中选择安全与规范 > 权限中心 > 权限工单,单击权限申请 > 库权限,在权限申请工单页面申请您需要的权限。

    变更SQL

    输入DDL(Data Definition Language),例如ALTER TABLEOPTIMIZE

    说明

    如果您输入的是DML(Data Manipulation Language),则您进行的是无锁数据变更任务。更多信息,请参见DML无锁变更

  4. 单击提交申请

    系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因,单击修改SQL,修改SQL后重试。

  5. 等待审批通过后,在工单详情页的执行区域,单击执行变更

  6. 配置任务执行参数。

    配置项

    说明

    执行策略

    • 立即执行:系统默认,单击确认执行后立即执行工单任务。

    • 定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。

    指定结束时间

    • 开启:选择任务结束时间。如果任务在指定结束时间之前没有执行完毕,则系统将不再继续执行未完成的SQL任务,防止高峰期执行任务,影响业务运作。

    • 关闭:系统默认。

  7. 单击确定执行

    说明

    已暂停的任务,重启后,会重新开始执行任务。

    • 您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。

    • 您还可以在运维管理 > 任务管理中,查看无锁结构变更任务进度。具体操作,请参见查看无锁变更进度

实例开启无锁结构变更后,除本方案外,您在该实例中执行以下类型的结构变更工单或任务,都会优先采用无锁结构变更的方式。