Data Migration功能测试

126 阅读3分钟

作者:Haaahei

原文来源: tidb.net/blog/e6e2a9…

本节主要验证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工具满足我们的数据校验需求。