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

前提条件

  • 数据库类型为RDS MySQLPolarDB MySQL引擎MyBase MySQL和其他来源MySQL。
    说明 其他来源是指来自其他云厂商或自建的数据库。
  • 数据库引擎为InnoDB、Rocksdb、X-Engine。
  • 数据库已开启Binlog日志。
    说明 PolarDB MySQL引擎默认未开启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. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 无锁变更
  3. 配置无锁变更工单。
    参数名 说明
    申请的数据变更类别 选择无锁变更。
    数据库 搜索并选择目标数据库,支持选择多个目标数据库。
    • 有权限:只能搜索并选择有变更权限的数据库。
    • 全部:可以搜索并选择所有的数据库(除开启元数据访问控制的数据库)。
      说明 如果您没有目标数据库的变更权限,请单击目标数据库右侧的申请权限,在权限申请工单页面申请您需要的权限。
    变更SQL 输入DDL(Data Definition Language),例如ALTER TABLEOPTIMIZE
    说明 如果您输入的是DML(Data Manipulation Language),则您进行的是无锁数据变更任务。更多信息,请参见DML无锁变更
  4. 单击提交申请
    系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因,单击修改SQL,修改SQL后重试。
  5. 等待审批通过后,在工单详情页的执行区域,单击执行变更
  6. 配置任务执行参数。
    配置项 说明
    执行策略
    • 立即执行:系统默认,单击确认执行后立即执行工单任务。
    • 定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。
  7. 单击确定执行
    • 您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。
    • 您还可以在运维管理 > 任务管理,查看无锁结构变更任务进度。具体操作,请参见查看无锁变更进度
实例开启无锁结构变更后,除本方案外,您在该实例中执行以下类型的结构变更工单或任务,都会优先采用无锁结构变更的方式。