SHOW TABLE STATUS LIKE 'table_name';
查看表信息
在数据量大的情况下进行结构变更,需要考虑锁表的风险,锁表将导致业务无法正常写入。MySQL原生能力:
MySQL 5.5及之前的版本,DDL提供了Table-Copy和In-Place两种执行算法:
MySQL 5.6及后续的版本,DDL还提供了Innodb-OnlineDDL。关于Innodb-OnlineDDL,请参见Innodb-OnlineDDL。
可以覆盖大范围的DDL类型(如,添加列、删除列、列名修改、添加索引、修改索引等),但仍然有些常见的DDL类型(如,修改列的类型、修改列的长度、修改字符集等)无法覆盖。
相比较数据库原生,DMS无锁结构变更支持控制变更的执行速率,可避免数据库主备链路延迟,对数据库性能影响更小,并支持多种原生OnlineDDL执行时会锁表的场景。
相比较PT-Online、OSC等其它工具,DMS无锁结构变更不依赖于触发器,且异步执行时对数据库的影响非常小,可随时安全中断。
DMS无锁结构变更与DTS同步工具兼容性好,变更的表中如有DTS表级别的复制链路,使用DMS无锁结构变更不会导致DTS复制中断。
说明
必须在2020年2月14日后重启过DTS复制链路。
MySQL原生OnlineDDL与DMS无锁结构变更能力对比:
| 支持项 | MySQL5.5及以前版本 | MySQL5.6及后续版本 | DMS无锁结构变更 |
|---|
| 支持项 | MySQL5.5及以前版本 | MySQL5.6及后续版本 | DMS无锁结构变更 |
|---|---|---|---|
| 添加列 | N | Y | Y |
| 删除列 | N | Y | Y |
| 列名修改 | N | Y | Y |
| 添加索引 | N | Y | Y |
| 修改索引 | N | Y | Y |
| 碎片整理操作 | N | Y | Y |
| 修改列的类型 | N | N | Y |
| 修改列的长度 | N | N | Y |
| 修改字符集 | N | N | Y |
| 转换字符 | N | N | Y |
| 时区修正操作 | N | N | Y |
| 缓解或消除备库延迟 | N | N | Y |
DMS无锁结构变更与其他变更方案对比信息,请参见无锁结构变更方案对比。
DMS支持对已有分区表的表进行结构变更。
无锁结构变更支持在同一变更工单中,对同一数据库下的多张表进行变更。
在配置工单的变更SQL时,不同表SQL可使用英文分号(;)隔开。
当表(只有主键或唯一键)进行无锁表结构变更时,不允许更新主键和唯一键,否则会导致变更任务失败。