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

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

前提条件

  • 数据库类型为RDS MySQLPolarDB MySQLMyBase MySQL或其他来源MySQL。

    说明

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

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

  • 数据库已开启Binlog日志。

    说明

    PolarDB MySQL默认未开启Binlog

  • 如果当前DMS租户下有免费使用无锁变更的额度,则不限制实例的管控模式。否则实例的管控模式需要为稳定变更或安全协同。更多信息,请参见查看管控模式

    说明

    稳定变更、安全协同是付费的管控模式

  • 实例已开启无锁结构变更

注意事项

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

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

      说明

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

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

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

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

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

    说明

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

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

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

操作步骤

说明

如下操作以安全协同模式的实例进行举例。

  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. 配置任务执行参数。

    配置项

    说明

    执行策略

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

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

    说明

    定时任务的实际执行时间可能与设定执行时间之间存在±1分钟的误差。

    指定结束时间

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

    说明

    任务的实际结束时间可能与指定结束时间之间存在±1分钟的误差。

    是否开启主备检查

    为该数据库开启主备检查后,可实时保障主备数据同步、保障数据库高可用性和故障快速恢复能力。

    灰度类型

    批次执行SQL策略。

    • 无灰度:DMS自动执行任务中的所有SQL。

    • 灰度第一条SQL成功后暂停:第一条SQL执行成功后,DMS将会自动暂停执行SQL。如您需要继续执行SQL,请单击重试,剩余SQL将会一次性执行完成,中间再无暂停。

    • 每条SQL执行成功后暂停:每条SQL执行后都会自动暂停,需要您手动单击重试来执行下一条SQL。

  7. 单击确定执行

    DMS任务执行中,您可随时暂停任务。已暂停的任务在重启后,会重新开始执行任务。

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

    • 您还可以在运维管理 > 任务管理中,查看无锁变更进度

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

    OSZAR »