为解决变更数据库表结构时的锁表问题,数据管理DMS推出了无锁结构变更功能,该功能可以较好地规避因锁表以致于阻塞业务和数据库原生OnlineDDL带来的主备延迟问题。本文介绍通过提交无锁变更工单实现数据库无锁结构变更的方法。
前提条件
注意事项
- 使用具备读写权限的数据库账号或高权限数据库账号。如果当前数据库账号权限不足,您可以: - 授权数据库账号权限。更多信息,请参见MySQL数据库账号权限管理。 说明- 为数据库账号添加ALL PRIVILEGES权限或以下读写权限: - ALTER、CREATE、DELETE、DROP、INDEX、INSERT、LOCK TABLES、SELECT、TRIGGER、UPDATE、REPLICATION CLIENT和REPLICATION SLAVE权限。 
- 更换数据库账号。更多信息,请参见编辑实例。 
 
- 确保数据库磁盘空间充足:由于需要在目标数据库中新建临时表用于数据拷贝,请确保磁盘剩余空间为目标表的两倍以上,磁盘空间不足将导致实例被锁定。更多信息,请参见数据库性能。 
- 目标表中有主键或唯一键:在执行无锁结构变更时,主键或唯一键用于全量拷表分段操作及后续增量更新。 说明- 如果目标表中仅有主键或唯一键,在执行结构变更期间更新主键或唯一键,将导致任务执行失败。 
- 目标表名的长度不能超过56个字符。 
- 不支持PolarDB分布式版(包含PolarDB-X 1.0和PolarDB-X 2.0)、RDS PostgreSQL等其他非MySQL数据库使用DMS的无锁结构变更功能。 
操作步骤
如下操作以安全协同模式的实例进行举例。
- 登录数据管理DMS 5.0。
- 在顶部菜单栏中,选择。 说明- 若您使用的是极简模式的控制台,请单击控制台左上角的  图标,选择。 图标,选择。
- 配置无锁变更工单。部分参数说明如下: - 更多参数说明,请参见操作步骤。 - 参数名 - 说明 - 数据库 - 搜索并选择目标数据库,支持选择多个目标数据库。 - 有权限:只能搜索并选择有变更权限的数据库。 
- 全部:可以搜索并选择所有的数据库(除开启元数据访问控制的数据库)。 说明- 如果您没有目标数据库的变更权限,请在顶部菜单栏中选择,单击,在权限申请工单页面申请您需要的权限。 
 - 执行方式 - 选择工单的执行方式: - 审批通过后,提交者执行。 
- 审批通过后,自动执行。 
- 最后一个审批人执行。 
 说明- 管理员可以在中,修改执行方式列表。具体操作,请参见配置管理。 - 影响行数 - 预估本次更新影响的数据行数。 - 变更SQL - 输入DDL(Data Definition Language),例如 - ALTER TABLE、- OPTIMIZE。说明- 如果您输入的是DML(Data Manipulation Language),则您进行的是无锁数据变更任务。更多信息,请参见DML无锁变更。 
- 单击提交申请。 - 系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因,单击修改SQL,修改SQL后重试。 
- 等待审批通过后,在工单详情页的执行区域,单击执行变更。 
- 配置任务执行参数。 - 配置项 - 说明 - 执行策略 - 立即执行:系统默认,单击确认执行后立即执行工单任务。 
- 定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。 
 说明- 定时任务的实际执行时间可能与设定执行时间之间存在±1分钟的误差。 - 指定结束时间 - 指定任务结束时间。如果任务在指定结束时间之前没有执行完毕,则系统将不再继续执行未完成的SQL任务,防止高峰期执行任务,影响业务运作。 说明- 任务的实际结束时间可能与指定结束时间之间存在±1分钟的误差。 - 是否开启主备检查 - 为该数据库开启主备检查后,可实时保障主备数据同步、保障数据库高可用性和故障快速恢复能力。 - 灰度类型 - 批次执行SQL策略。 - 无灰度:DMS自动执行任务中的所有SQL。 
- 灰度第一条SQL成功后暂停:第一条SQL执行成功后,DMS将会自动暂停执行SQL。如您需要继续执行SQL,请单击重试,剩余SQL将会一次性执行完成,中间再无暂停。 
- 每条SQL执行成功后暂停:每条SQL执行后都会自动暂停,需要您手动单击重试来执行下一条SQL。 
 
- 单击确定执行。 - 当DMS任务执行中,您可随时暂停任务。已暂停的任务在重启后,会重新开始执行任务。 - 您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。 
- 您还可以在中,查看无锁变更进度。 
 
实例开启无锁结构变更后,除本方案外,您在该实例中执行以下类型的结构变更工单或任务,都会优先采用无锁结构变更的方式。