TiDB DDL 兼容性测试

DDL兼容性
【期望的需求行为】
DDL完全兼容MySQL 5.7

DDL不兼容MySQL,会导致DM的同步遇到不支持的DDL中断影响业务


Tidb DDL兼容性测试.xlsx (9.9 KB)

3 个赞

场景持续完善,还有没覆盖到的大家可以回复在下面,我补进来

1 个赞

收集的蛮完善了,我这边受 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

如上,祝好。

2 个赞

我补充下

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 更改精度、删主键、删索引字段等。等这些兼容性都解决了,我们会考虑迁移升级到该版本。:+1:

  1. 两种 alter 语句添加多个字段写法都支持的(相关 PR:https://github.com/pingcap/tidb/pull/15540 ),是指的如下两种方式吧:
ALTER TABLE tbl_name
    [alter_specification [, alter_specification] ...]

alter_specification:
| ADD [COLUMN] (col_name column_definition,...)
| ADD [COLUMN] col_name column_definition
  1. 关于聚簇索引可以参考:https://docs.pingcap.com/zh/tidb/stable/clustered-indexes#聚簇索引
1 个赞

今天又遇到了一个 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 数据类型仍然是实验特性,具体支持情况请官方视情况而定。

1 个赞

这个是在那个版本支持呢

这个可以认为是实验特性,目前没有 GA,需要开启配置(tidb_enable_change_multi_schema)才能启用. 你这边列的几个版本都是支持的