课程名称:301 + TIDB数据迁移
学习时长:30
课程收获:
- TIDB数据迁移
- 从MySQL迁移数据到TIDB
- 如何将数据从 Aurora 迁移到 TiDB
- 将数据从 Oracle 迁移到 TiDB
课程内容:
TIDB数据迁移
dumpling 逻辑的数据导出,
- 支持TIDB和mysql
- 支持SQL和CSV,
- 支持table-filter 支持单条sql的内存限制
- 支持V4.0以上版本,
- 支持自动调整GC时间
- 支持导出时间
lighting 全量数据高速导入Tidb 支持mydump和csv 数据源,
- 支持自动开启导入模式,大表并行导入,
- 使用KV导入,通过TIKV importer导入。
- 校验本地数据源和下流导入文件,
- 自动调整自增ID,通过表数据估算,可能导致自增ID高于总的数据量
TIDB DM
统一数据导入管控平台
- 支持table routing
- 黑白名单
- binlog event filter
- DMOnline DDL schema
- 合并和分布分库表
从MySQL迁移数据到TIDB
mysql → dumping → lighting → TiDB
dumping:
- 相当于正常mysql客户端,需要select,reload,lock table, replication client 权限
因为MVCC 实现需要调整GC模式 V4.0后自动调整,导出数据量大,需要更长的调整GC 时间
lighting:
- TIDB backend 模式,导入过程提供对外服务,导入效率更低
- TIKV importer 模式,导入过程中TIKV不提供对外服务,但是导入效率更高
如何将数据从 Aurora 迁移到 TiDB
通过DM实现,增量导出过程中,DM依赖ROW格式binlog,如不满足会报错
Aurora
- 有些Aurora版本不支持binlog,需要检查版本
- DM依赖ROW格式binlog,如不满足会报错
- 上下游数据库实例,用户相关权限需要单独配置
- 上游数据库和TIDB表兼容性需要额外检查,外键索引等
- 上游分库分表一致性检查,包括唯一性
将数据从 Oracle 迁移到 TiDB
通过OGG(Oracle GoldenGate)实现
参考 https://book.tidb.io/session4/chapter5/from-oracle-to-tidb.html
####重点关注
同步过程说明
2.1. 表结构转换
由于 Oracle 中表数据类型与 TiDB 分布式数据库中数据类型不一致,需要预先进行表结构的转换(可以使用 Navicat 工具)。
2.2. 初始化同步
初始化数据通过 OGG initial load 进程将 Oracle 数据导入到 TiDB 分布式数据库中,如此时 Oracle 数据库中仍然有写入操作,则 initial load 开始时间之后的数据变化无法同步,此时需要进行增量的数据同步,且在同步多张表时,每个表同步的时间并不一致。如采用停机同步(同步期间 Oracle 中表数据不再变化),仅需要进行初始化同步操作。
2.3. 增量数据同步
在初始化同步的基础上进行后续变化的数据同步,需要在初始化同步之前,先开启日志抽取。由于异构平台,无法基于统一时间点完成数据初始导入操作,所以在完成初始化导入操作之后需要完整应用开始 initial load 同步之后的所有 log,此时会存在重复执行的问题,OGG 中通过 handlecolisions 参数处理冲突的场景,保证最终数据的一致性(根据主键或唯一键进行重复的操作可以保证最终数据一致,在缺少主键的场景可能会导致数据重复)。
OGG :
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2: