DDL兼容性
【期望的需求行为】
DDL完全兼容MySQL 5.7
DDL不兼容MySQL,会导致DM的同步遇到不支持的DDL中断影响业务
Tidb DDL兼容性测试.xlsx (9.9 KB)
场景持续完善,还有没覆盖到的大家可以回复在下面,我补进来
收集的蛮完善了,我这边受 DDL 不兼容影响较多,当时也汇总了一些,我对比了下,大部分都包含在里面了。下面有几个,你看是不是需要覆盖的:(有的更改我不确认是否合理,请自行斟酌)
1. 排序规则的修改
Error 8200: Unsupported modifying collation of column 'xxx' from 'utf8mb4_bin' to 'utf8mb4_general_ci' when index is defined on it.
2. timestamp 更改为 datetime
[ddl:8200]Unsupported modify column: type datetime not match origin timestamp, and tidb_enable_change_column_type is false
3. datetime 更改为 date,date 更改为 datetime
[ddl:8200]Unsupported modify column: type date not match origin datetime, and tidb_enable_change_column_type is false
[ddl:8200]Unsupported modify column: type datetime not match origin date, and tidb_enable_change_column_type is false
4. 各种同类型的“由大改小”
[ddl:8200]Unsupported modify column: length 8 is less than origin 36, and tidb_enable_change_column_type is false # 这个是 varchar
如上,祝好。
我补充下
TiDB 5.1.1 和 5.0.1 支持单个 alert 语句添加/删除多个字段,不过需要开启 tidb_enable_change_multi_schema 变量,此外此功能没有真正 GA。
另外,TiDB 支持在建表之后添加或删除主键(非聚簇索引类型的):https://docs.pingcap.com/zh/tidb/stable/clustered-indexes#添加删除非聚簇索引
这描述的大部分是 change/modify column 相关的,具体信息补充的时候也可以参考一下:https://docs.pingcap.com/zh/tidb/stable/sql-statement-modify-column#modify-column
好的,我们实际使用,基本遇到的都是 alter DDL 相关的,create/drop DDL 目前还没遇到什么问题。
1、单个 alert 语句添加/删除多个字段,有两种写法,其中一种是支持的,另一种不支持,最终会支持嘛?
2、聚簇索引类型的会支持吗?
你上面这几种情况都支持了
赞。
DM 遇到过一个:alter table tb_name row_format=compressed key_block_size=8;
好的。我上面列出的,只是你表格里没有的,其实,你表格里 50% 我们都遇到了,最典型的就是 decimal 更改精度、删主键、删索引字段等。等这些兼容性都解决了,我们会考虑迁移升级到该版本。
ALTER TABLE tbl_name
[alter_specification [, alter_specification] ...]
alter_specification:
| ADD [COLUMN] (col_name column_definition,...)
| ADD [COLUMN] col_name column_definition
今天又遇到了一个 DDL 不兼容的情况,将 json 类型转换为 text 类型:
"RawCause": "[ddl:8200]Unsupported modify column: type text not match origin json, and tidb_enable_change_column_type is false",
我刚刚查阅了下官方文档,官方最新 v5.2 版 json 数据类型仍然是实验特性,具体支持情况请官方视情况而定。
这个是在那个版本支持呢
这个可以认为是实验特性,目前没有 GA,需要开启配置(tidb_enable_change_multi_schema)才能启用. 你这边列的几个版本都是支持的