在使用数据管理DMS的DDL无锁变更功能前,您需要先开启目标实例的DMS无锁结构变更优先功能。

背景信息

MySQL原生的OnlineDDL在进行结构变更时仍有锁表风险:

  • 在MySQL5.5以及之前的版本中,MySQL的DDL仅提供Table-Copy和In-Place(MySQL5.5开始提供)两种执行算法。
    • Table-Copy:通过拷贝临时表完成变更,变更期间表被锁定不可写入。
    • In-Place:该算法执行期间可以对数据库进行读写,但仅支持索引数据。
  • MySQL5.6及后续版本提供了Innodb-OnlineDDL能力,覆盖了大范围的DDL类型(添加列、删除列、列名修改、添加索引、修改索引等),但仍然有些常见的DDL类型无法覆盖(修改列的类型、修改列的长度、修改字符集等)。

为了解决上述问题,数据管理DMS提供了DDL无锁变更功能,较好地规避因数据库变更导致锁表以至于阻塞业务的现象,以及数据库原生Online DDL带来的主备延迟现象,更多信息,请参见DDL无锁变更

前提条件

您的用户角色为DBA或管理员。

操作步骤

  1. 登录新版DMS控制台
  2. 在页面顶部,选择全部功能 > 系统管理 > 实例管理
  3. 单击目标实例右侧操作列下的更多>编辑实例
    说明 您也可以在DMS左侧的实例列表中,右键单击目标实例,选择 编辑实例
  4. 单击高级信息
  5. 不锁表结构变更的下拉菜单中选择开启(DMS无锁表结构变更优先)
    选择项 执行说明 备注
    DMS无锁表结构变更优先 直接使用DMS自研的DDL无锁变更执行,以保障不锁表。 执行时间相对MySQL原生OnlineDDL会慢一些,但不影响复制行为,不会产生延迟现象。
    MySQL原生OnlineDDL优先 优先使用MySQL原生的OnlineDDL执行,如果源生会锁表的话会转用DMS自研的DDL无锁变更执行,以保障不锁表。 执行时间相对比较快,但有可能导致实例的并行复制降为串行复制,从而可能产生主备延迟现象。
    关闭 原生语句下发给MySQL执行,不进行任何处理。
  6. 单击提交

后续步骤

您可以通过以下方式执行表结构变更,系统将根据您在上一步的选择项( DMS无锁表结构变更优先MySQL原生OnlineDDL优先)进行执行: