为解决变更数据库表结构时的锁表问题,数据管理DMS推出了无锁结构变更功能,该功能可以较好地规避因锁表以致于阻塞业务和数据库原生OnlineDDL带来的主备延迟问题。本文介绍通过提交无锁变更工单实现数据库无锁结构变更的方法。
前提条件
数据库类型仅支持RDS MySQL、PolarDB 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个字符。
操作步骤
如下操作以稳定变更模式的实例进行举例。若您选择安全协同模式的实例,还会出现原因类别、执行方式等参数。参数的详细信息,请参见操作步骤。
- 登录数据管理DMS 5.0。
在顶部菜单栏中,选择 。
说明若您使用的是极简模式的控制台,请单击控制台左上角的图标,选择
。配置无锁变更工单。
参数名
说明
数据库
搜索并选择目标数据库,支持选择多个目标数据库。
有权限:只能搜索并选择有变更权限的数据库。
全部:可以搜索并选择所有的数据库(除开启元数据访问控制的数据库)。
说明如果您没有目标数据库的变更权限,请在顶部菜单栏中选择
,单击 ,在权限申请工单页面申请您需要的权限。
变更SQL
输入DDL(Data Definition Language),例如
ALTER TABLE
、OPTIMIZE
。说明如果您输入的是DML(Data Manipulation Language),则您进行的是无锁数据变更任务。更多信息,请参见DML无锁变更。
单击提交申请。
系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因,单击修改SQL,修改SQL后重试。
等待审批通过后,在工单详情页的执行区域,单击执行变更。
配置任务执行参数。
配置项
说明
执行策略
立即执行:系统默认,单击确认执行后立即执行工单任务。
定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。
指定结束时间
开启:选择任务结束时间。如果任务在指定结束时间之前没有执行完毕,则系统将不再继续执行未完成的SQL任务,防止高峰期执行任务,影响业务运作。
关闭:系统默认。
单击确定执行。
说明已暂停的任务,重启后,会重新开始执行任务。
您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。
您还可以在查看无锁变更进度。
中,查看无锁结构变更任务进度。具体操作,请参见
实例开启无锁结构变更后,除本方案外,您在该实例中执行以下类型的结构变更工单或任务,都会优先采用无锁结构变更的方式。