数据管理DMS为解决结构变更时的锁表问题推出了DDL无锁变更功能,较好地规避因数据库变更导致锁表以至于阻塞业务的现象,以及数据库原生Online DDL带来的主备延迟现象。本文介绍实现DDL无锁结构变更的方法。

前提条件

  • 支持的数据库类型:RDS MySQLPolarDB MySQL引擎MyBase MySQL、其他来源MySQL。
  • 支持的数据库引擎:InnoDB、Rocksdb、X-Engine。
  • 实例的管控模式:稳定变更或安全协同。更多信息,请参见查看管控模式
  • 实例已开启无锁结构变更。具体操作,请参见开启无锁结构变更

功能限制

限制项 说明
数据库账号权限
  • 高权限账号
  • 具备读写权限的数据库账号,具体权限如下:

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

说明
磁盘空间 由于需要在目标数据库新建表拷贝数据,大表变更时需要保证磁盘有足够的剩余空间。
说明 实例空间不足将导致实例被锁定。
日志格式 需开启Binlog日志。
说明 PolarDB默认未开启Binlog。开启的具体操作,请参见 PolarDB-如何开启Binlog
源表上有主键或唯一键 在执行DDL无锁变更时,主键或唯一键将用于全量拷表分段操作及后续增量更新的依据。
  • 如果表上仅有主键:在执行变更期间,不能更新(UPDATE)主键,否则将导致任务失败并退出。
  • 如果表上没有主键,有唯一键:在执行变更期间,不能更新(UPDATE)唯一键,否则将导致任务失败并退出。
  • 如果表上没有主键和唯一键:请在实例上先添加主键或唯一键后,重新提交DDL无锁更变任务。
表名长度 表名的长度不能超过56个字符。

实现无锁结构变更的方式

  • 通过提交结构设计工单实现,具体操作,请参见结构设计
  • 通过提交结构同步工单实现,具体操作,请参见结构同步
  • 通过提交影子表同步工单实现,具体操作,请参见影子表同步
  • 通过提交空库初始化工单实现,具体操作,请参见空库初始化
  • 通过提交表一致性修复工单实现,具体操作,请参见表一致性修复
  • 通过提交无锁变更工单执行的表结构变更实现,具体操作,请参见提交DDL无锁变更工单
  • 通过提交普通数据变更工单执行的表结构变更实现,具体操作,请参见普通数据变更

提交DDL无锁变更工单

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 无锁变更
  3. 配置无锁变更工单。
    参数名 说明
    数据库 搜索并选择目标数据库。
    说明 您需要有目标数据库的变更权限。更多信息,请参见查看我的权限
    变更SQL 输入DDL(Data Definition Language),例如ALTER TABLEOPTIMIZE
    说明 如果您输入的是DML,则您进行的是DML无锁结构变更任务。更多信息,请参见DML无锁变更
  4. 单击提交申请
    系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因,单击修改SQL,修改SQL后重试。
  5. 等待审批通过后,在工单详情页的执行区域,单击执行变更
    说明 您可以在工单详情页的审批区域,查看审批进展。
  6. 配置任务执行参数。
    配置项 说明
    执行策略
    • 立即执行:系统默认,单击确认执行后立即执行工单任务。
    • 定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。
  7. 单击确定执行
    • 您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。
    • 您还可以在运维管理 > 任务管理,查看无锁结构变更任务进度。具体操作,请参见查看无锁变更进度