本节主要验证DM从MySQL同步数据到TiDB的各场景用例。
全量迁移
| 场景 | 用例 | 支持? | 限制 | 
|---|---|---|---|
| 普通场景 源库:普通 目标库:普通 | 整库 | √* | 若为RDS,则不支持库中存在没有主键的表 | 
| 指定表 | √* | 若为RDS,则不支持没有主键的表 | |
| 库(表)更名 | √ | ||
| 分库分表聚合 源库:分库分表 目标库:聚合 | 整库 | √* | 若为RDS,则不支持库中存在没有主键的表;若主键为自增,则须保证分表的主键全局唯一 | 
| 指定表 | √* | 若为RDS,则不支持没有主键的表;若主键为自增,则须保证每个分表的主键全局唯一 | |
| 库(表)更名 | √ | 
增量同步
| 场景 | 用例 | 支持? | 限制 | 说明 | 
|---|---|---|---|---|
| 普通场景 源库:普通 目标库:普通 | 新增表 | √* | TiDB限制 | |
| 删除表 | √ | |||
| 重命名表 | √ | |||
| 新增字段 | √* | TiDB限制 | ||
| 删除字段 | √ | |||
| 修改字段 | √* | TiDB限制 | ||
| 重命名字段 | √ | |||
| 新增索引 | √* | TiDB限制 | ||
| 删除索引 | √ | |||
| 重命名索引 | √ | |||
| Gh-ost新增字段 | √* | TiDB限制 | ||
| Gh-ost修改字段 | √* | TiDB限制 | ||
| Gh-ost删除字段 | √ | |||
| Gh-ost新增索引 | √* | TiDB限制 | ||
| Gh-ost删除索引 | √ | |||
| Truncate table | √ | |||
| 表及事件过滤等 | √ | DM特性 | ||
| drop database | √ | |||
| 分库分表聚合 源库:分库分表 目标库:聚合 | 新增表 | √* | 分库分表DDL限制,TiDB限制 | |
| 删除表 | × | 分库分表DDL限制 | ||
| 重命名表 | √* | 分库分表DDL限制 | ||
| 新增字段 | √* | 分库分表DDL限制、TiDB限制 | ||
| 删除字段 | √ | |||
| 修改字段 | √* | 分库分表DDL限制、TiDB限制 | ||
| 重命名字段 | √* | 分库分表DDL限制 | 乐观模式下不支持,悲观模式下支持 | |
| 新增索引 | √* | TiDB限制 | ||
| 删除索引 | √ | |||
| 重命名索引 | √* | 分库分表DDL限制、TiDB限制 | 乐观模式下不支持,悲观模式下支持 | |
| Gh-ost新增字段 | √* | 分库分表DDL限制、TiDB限制 | ||
| Gh-ost修改字段 | √* | 分库分表DDL限制、TiDB限制 | ||
| Gh-ost删除字段 | √ | |||
| Gh-ost新增索引 | √* | TiDB限制 | ||
| Gh-ost删除索引 | √ | |||
| Truncate table | × | 分库分表DDL限制 | ||
| 表及事件过滤等 | √ | DM特性 | ||
| Drop database | × | 分库分表DDL限制 | 
不管是全量迁移还是增量同步都可以通过设置限流参数来保证上游和目标库数据库实例的性能稳定。
其他用例
用例1:库表改名或着分库分表聚合情况下的同步,源库的DDL和DML是否支持带库名?
结果:支持
用例2:是否支持ALGORITHM={DEFAULT | INPLACE | COPY}, LOCK={DEFAULT | NONE | SHARED | EXCLUSIVE}语法? 例:alter table test.test_1 modify c3 varchar(30) default null, algorithm=inplace, lock=shared;
结果:支持,不会报错,不建议使用。
说明:DM会把原DDL改成3条语句分别执行:
1). alter table test.test_1 modify c3 varchar(30) default null;
2). alter table test.test_1 algorithm=inplace;
3). alter table test.test_1 lock=shared;
用例3:源库DDL一条语句设计多个操作,DM是否支持,如: alter table shard_2.test_4 add c4 varchar(30) default null, add c5 varchar(30) default null;
结果:支持,不管是普通同步还是分库分表聚合都支持。DM会把原DDL拆成多条语句分别执行:alter table shard_2.test_4 add c4 varchar(30) default null和alter table shard_2.test_4 add c5 varchar(30) default null
用例4:主从切换对DM同步的是否有影响?
结果:在gtid模式及主从gtid一致的情况下,无影响
数据校验
DM本身不提供数据校验功能,可以通过TiDB生态中的sync-diff-inspector工具满足我们的数据校验需求。

