更新时间:2026-07-31 GMT+08:00
无锁数据变更简介
操作场景
在高并发的数据库操作场景中,当需要对数据库表执行DDL操作时,通常会遇到因加锁导致的性能瓶颈,影响业务的正常运行。TaurusDB集成gh-ost工具提供无锁变更功能,可以在执行DDL操作时避免对原表数据加锁,从而减少对业务的影响,同时通过事务管理机制确保数据的一致性和完整性。
使用建议
- 建议业务尽量在低峰期执行无锁热变更操作。
- 避免变更过程中使用session变量修改环境参数,例如修改time_zone等会话级参数。
- 避免变更期间业务侧运行长事务。
- 避免变更后目标表的字段约束、长度、类型范围、精度相比变更前变小,如 VARCHAR 长度缩短、整型范围降级、DECIMAL 精度缩减、NULL 改为 NOT NULL(表存在空数据场景)会出现数据截断、数值溢出、数据丢失。
约束限制
- 变更SQL语句需要使用ALTER TABLE Statement的语法形式,具体语法形式请参照官方文档ALTER TABLE Statement。
- 仅适用于企业版,部署形态为集群版的TaurusDB实例,变更前实例状态正常,主节点和只读节点状态正常。
- 单次任务最多支持10 条不同表的变更 SQL,末尾以英文;结尾,多条ALTER 语句不可操作同一张表。
- 当前集成gh-ost版本为v1.1.4, 不支持识别MySQL原生INSTANT算法。如有需要,请连接数据库直接执行。
- 待变更的目标库表限制如下:
表1 目标库表约束限制 分类
限制内容
表类型限制
不能为临时表、系统表、视图。
存储引擎与字符集限制
- 存储引擎必须是 InnoDB。
- 不支持 latin1字符集的表结构。
表结构限制
- 不支持分区表。
- 不支持无主键的表进行变更。
- 主键字段类型不能为 json、float、binary 类型。
- 不支持 SET 类型列、虚拟列。
外键与触发器限制
- 不支持待变更的目标表自身拥有外键,且当前表不可被其他表作为外键依赖引用。
- 不支持待变更的目标表拥有触发器。
字段与索引限制
- 不支持修改整表字符集、排序规则(COLLATION)。
- 不支持修改表存储引擎。
- 不支持对全文索引、空间索引进行新增、删除、修改变更。
操作限制
- 不支持重命名、删除、修改主键,不支持新增主键。
- 不支持表重命名操作。
- 不允许待变更库中存在与 ~{tablename}_ghc、~{tablename}_gho 同名的表。
- 不支持 TRUNCATE TABLE、DROP TABLE、清空表类操作。
- 字段重命名及所有字段变更不允许附带 FIRST / AFTER 调整字段物理列顺序。