Module 03 TiDB 集群同步和迁移数据
本章节学习TiDB 两套官方同步组件:DM(MySQL→TiDB 迁移)、TiCDC(TiDB 向外同步 / 异地灾备),是传统数据库上云、TiDB 多集群灾备、实时数据集成的核心运维能力。
一、工具核心定位与两套工具核心区分
核心定位
解决两类数据流转需求:
- 存量业务迁移:传统 MySQL/MariaDB 数据库全量 + 增量迁移至 TiDB(DM 工具);
- TiDB 向外实时同步:TiDB 主集群同步数据至下游 TiDB、MySQL、Kafka,用于异地灾备、数据仓库、实时数仓(TiCDC 工具)。
DM vs TiCDC 核心边界区分
| 工具 | 上游数据源 | 下游目标 | 核心用途 | 数据来源 |
|---|---|---|---|---|
| DM | MySQL/MariaDB | TiDB | 传统数据库迁移上 TiDB | MySQL Binlog |
| TiCDC | TiDB 集群 | TiDB/MySQL/Kafka | TiDB 异地灾备、数据流出 | TiKV Change Log |
二、Lesson12 使用 TiDB Data Migration(DM)同步数据
1. DM 核心原理
DM 是专门面向MySQL 迁移到 TiDB的一体化迁移工具,支持全量导出 + 增量 binlog 同步一站式迁移,同时兼容 DDL+DML 同步,解决传统 mysqldump+binlog 手动迁移的复杂度。 核心能力:
-
全类型 SQL 同步能力
-
完整支持 DML 增删改操作、绝大多数 DDL 表结构变更语句同步复制,适配业务日常表结构迭代场景。
-
合库合表同步能力
-
支持上游多库、多表映射到下游单个库表,是分库分表迁移核心能力。
-
精细化过滤机制
-
内置黑白名单(Block&Allow List)、Binlog 事件过滤器,可按需过滤指定库表、指定 SQL 事件,屏蔽运维表、临时表同步。
-
集群管控与高可用
-
采用主从集群架构,支持任务调度容错、故障自动转移,保障迁移任务不间断运行。
-
全量 + 增量一体化流程
-
先通过 Dumper 导出上游全量数据、Loader 导入目标 TiDB 完成存量初始化;再持续消费上游 Binlog,实时同步增量变更,实现业务不停机割接。
2. DM 集群架构组件
2.1. DM-master
- 核心职责:全局集群调度、任务元数据管理、Worker 节点管控、高可用选主、前端管控交互;
- 部署规范:生产环境建议部署3 个实例,基于 Raft 协议保证元数据高可用,避免单点故障。
2.2. DM-worker
-
核心职责:实际迁移执行单元,内部封装三大模块:
- Dumper:上游 MySQL 全量数据导出;
- Loader:全量数据导入下游 TiDB;
- Binlog Replication:增量 Binlog 拉取、解析、同步回放;
-
部署规范:Worker 节点数量不少于上游 MySQL 实例数量,一对一绑定上游数据源,保障同步性能与隔离性。
3. 适用场景与硬性限制
3.1. 典型适用场景
-
兼容 MySQL 数据库迁移
-
支持 MySQL、MariaDB 等兼容 MySQL 协议数据库向 TiDB 迁移同步。
-
异构表结构同步
-
支持上下游库名、表名、字段映射配置,适配上下游表结构小幅差异化场景。
-
分库分表合并同步
-
互联网主流 MySQL 分库分表架构,上游多分片库表合并同步至下游 TiDB 单库单表,大幅简化运维。
3.2. 关键使用限制
-
数据库版本约束
-
上游 MySQL 有明确最低版本要求,过低版本 Binlog 格式、参数不兼容会导致同步异常。
-
DDL 语法兼容性
-
小众 MySQL 自定义 DDL、冷门分区语法、特殊引擎 DDL 可能无法正常解析同步。
-
GBK 字符集兼容限制
-
低版本 TiDB 对 GBK 字符集适配不完善,上下游字符集配置不一致会出现乱码、校验报错问题。
4. DM 集群部署流程(基于 TiUP)
- 安装 DM 组件与管控工具 dmctl
-- 拉取对应版本 DM 服务端组件、命令行管控工具。
tiup install dm dmctl
- 生成集群拓扑模板文件
-- 输出默认拓扑模板,可手动修改 master/worker 节点、端口、部署路径等参数。
tiup dm template > topology.yaml
- 执行集群部署
-- 指定集群名称、版本、拓扑文件,使用 root 用户完成远程节点部署。
tiup dm deploy dm-test ${version} \
./topology.yaml --user root -p
- 启动 DM 集群
-- 批量启动集群内 DM-master、DM-worker 全部实例。
tiup dm start dm-test
- 查看集群部署状态
-- 查看各组件运行状态、监听地址、版本信息、健康状态。
tiup dm display dm-test
- 管控工具启动迁移任务
-- 指定 master 地址,加载任务配置文件启动迁移任务,前置需完成数据源创建、下游 TiDB 信息配置。
tiup dmctl --master-addr=172.31.0.49:8261 \
start-task dm-task.yaml
5. 任务配置核心结构
- mysql-instances 绑定上游数据源
source-id,关联预先定义的黑名单、Binlog 过滤规则、库表路由规则,实现多上游数据源规则复用。 - target-database 填写下游 TiDB 集群连接地址、账号、密码等连接认证信息,作为同步写入目标端。
- 配置逻辑 将过滤、路由、性能优化规则统一封装,在任务配置中引用规则 ID,实现精细化、可复用的迁移管控。
6. DM 任务生命周期管理命令
| 命令 | 功能说明 |
|---|---|
| start-task | 加载任务配置,新建并启动迁移任务 |
| pause-task | 临时暂停运行中的迁移任务,断点保留 |
| resume-task | 恢复已暂停任务,从断点继续同步 |
| stop-task | 彻底停止任务,清空运行状态(可重新 start-task 拉起) |
| query-status | 查询任务全量状态:全量进度、增量延迟、报错、上下游点位 |
7. 过滤与路由核心规则详
7.1. block-allow-list 库表黑白名单
do-dbs:白名单,仅同步指定数据库;ignore-dbs:黑名单,跳过指定库 / 表同步;用于过滤运维库、系统临时库。
7.2. filters Binlog 事件过滤器
按 SQL 事件类型(INSERT/UPDATE/DELETE)、SQL 正则表达式拦截匹配语句,屏蔽无用操作同步。
7.3. routes 库表路由规则
核心用于分库分表合表场景,定义上游库表映射至下游目标库表名称,实现多分片合并同步。
7.4. 性能优化参数
rows:批量提交行数;chunk-filesize:全量导出分片大小;pool-size/worker-count:并发线程数;batch:写入批次参数;按需调优提升全量导入、增量回放性能。
三、Lesson13 使用 TiCDC 同步数据
1. 核心工作原理
-
底层数据源读取机制
-
直接从上游 TiKV 节点读取原生 Change Log 变更日志,严格按照事务时序排序整理,保障下游事务 ACID 顺序一致性,无需解析 Binlog,原生适配 TiDB 底层存储变更。
-
高可用调度能力
-
集群部署多 Capture 节点,支持同步任务自动分片调度、故障节点自动切换接管任务,无单点故障风险,保障同步链路持续稳定运行。
-
性能扩展性优势
-
天然低延迟同步,支持横向扩容 Capture 节点提升同步吞吐,适配大规模 TiDB 集群增量同步场景。
-
多格式下游适配
-
支持输出 Canal、Maxwell、Avro 等主流数据协议格式,可对接大数据生态消费组件。
-
部署方式灵活
-
在集群拓扑文件
topology.yaml中配置cdc_servers字段,可随 TiDB 集群统一部署,也可后期在线扩容新增 CDC 节点实现 scale-out 横向扩容。 -
硬件配置标准
-
生产硬件基线:16 核及以上 CPU、64GB 及以上内存、SSD 高速存储、万兆网络;实例部署数量建议≥2 个,满足高可用冗余要求。
2. 标准同步链路
完整流转链路: TiKV(Change Log 变更日志) → TiCDC Capture(拉取日志、事务排序、事务组装) → 下游目标端 下游支持对接:TiDB 集群、MySQL 数据库、Kafka 消息队列等组件,整体实现灾难场景下最终一致性数据复制。
3. 典型适用场景
3.1. 数据库异地灾备场景
搭建 TiDB 主从集群异地灾备架构,通过 TiCDC 同步核心业务数据至异地备集群,满足同城 / 异地容灾、故障切换、数据兜底备份需求。
3.2. 多场景数据集成场景
- 同构同步:TiDB 集群间数据同步、多集群数据镜像;
- 异构数据库同步:TiDB 同步至 MySQL 业务库;
- 大数据实时入湖:同步变更数据至 Kafka,对接 Flink、Spark 等实时计算、数据仓库平台。
4. 核心同步硬性限制
4.1. 索引强制约束
-
被同步数据表必须至少存在 1 个有效索引,无索引表无法被 TiCDC 同步;
-
主键(PRIMARY KEY)天然属于有效索引,可直接满足同步前提;
-
若使用唯一索引作为同步依据,需同时满足两个条件:
- 索引内每一列都显式定义
NOT NULL; - 索引字段不包含虚拟生成列。
- 索引内每一列都显式定义
4.2. 场景兼容限制
暂不支持仅使用 RawKV 模式的 TiKV 集群同步场景,仅适配标准 TiDB SQL 业务集群。
5. ChangeFeed 任务生命周期管理
5.1. 核心操作命令解读
| 命令 | 功能说明 | 关键参数说明 |
|---|---|---|
cdc cli changefeed create |
创建并启动同步任务 | --server:TiCDC 服务地址;--sink-uri:下游目标端连接地址;--changefeed-id:任务唯一标识 |
cdc cli changefeed list |
查看全量任务列表 | 配合--server指定集群,查看所有任务运行状态 |
cdc cli changefeed pause |
暂停同步任务 | 指定changefeed-id,任务断点保留,不清理同步点位 |
cdc cli changefeed resume |
恢复暂停任务 | 从暂停时的事务点位继续同步 |
cdc cli changefeed query -s |
查询任务详情 | -s参数展示同步延迟、上下游点位、报错详情、同步进度 |
5.2. 通用公共参数
--changefeed-id:同步任务全局唯一 ID;--sink-uri:下游写入目标地址(支持 MySQL、Kafka 等格式);--start-ts:任务起始同步时间戳;--target-ts:任务终止同步时间戳;--config:加载自定义规则配置文件(过滤、路由、性能参数等)。
5.3. 创建命令示例拆解
cdc cli changefeed create \
--server=http://10.0.10.25:8300 \
--sink-uri="mysql://root:123456@127.0.0.1:3306/" \
--changefeed-id="replication-task-1"
- 指定 TiCDC 服务访问地址;
- 下游为 MySQL 数据库,填写账号密码与连接地址;
- 自定义任务 ID,后续运维操作均通过该 ID 定位任务。
6. 全维度监控体系
6.1. Server 监控维度
展示 TiKV 节点、TiCDC 集群节点基础运行信息:节点存活状态、资源负载、端口、版本、实例健康度。
6.2. ChangeFeed 任务监控维度
单同步任务精细化指标:同步延迟、已同步事务点位、报错日志、上下游链路状态、任务启停状态。
6.3. Events 流转监控维度
观测 TiCDC 内部数据流转链路:日志拉取速率、事务排序耗时、下游写入吞吐、消息投递成功率。
6.4. TiKV 底层指标维度
关联上游 TiKV 节点负载、Change Log 生成速率、Region 调度状态,排查上游源头延迟问题。