0
0
0
0
博客/.../

# PCTA TiDB 认证学习笔记

 tianyan  发表于  2026-05-29

第一部分:考试信息

1.1 考试概况

项目 详情
认证全称 PingCAP Certified TiDB Associate(平凯数据库认证 TiDB 数据库专员)
考试形式 在线监考,全程视频
题目数量 50 道选择题
题型分布 前半部分单选题,后半部分多选题
考试时长 60 分钟
满分/合格 100 分 / 60 分及格
报名费用 699 元或 1599 积分
报考条件 无门槛,任何人均可参加

1.2 考试范围三大模块

┌──────────────────────────────────────────────────┐
│              PCTA 考试知识体系                       │
│                                                    │
│   ┌──────────────┐  ┌──────────────┐  ┌────────┐ │
│   │ 架构原理      │  │ 安装部署     │  │ 周边工具│ │
│   │ (40%)        │  │ (30%)       │  │ (30%)  │ │
│   ├──────────────┤  ├──────────────┤  ├────────┤ │
│   │• 核心组件     │  │• TiUP 部署  │  │• Dumpling│ │
│   │• Region 分裂  │  │• 集群管理   │  │• Lightning│ │
│   │• Raft 共识   │  │• 扩缩容     │  │• DM      │ │
│   │• 事务模型    │  │• 配置参数   │  │• BR 备份 │ │
│   │• MVCC       │  │• 升级回滚   │  │• CDC     │ │
│   │• 存储引擎    │  │• 运维监控   │  │• sync-diff│ │
│   └──────────────┘  └──────────────┘  └────────┘ │
└──────────────────────────────────────────────────┘

1.3 备考建议

  1. 官方课程https://learn.pingcap.com/learner/course(视频课后练习题必做,考试有原题)
  2. 官方文档https://docs.pingcap.com/zh/tidb/stable(视频外的补充,理解前因后果)
  3. AskTUG 论坛https://asktug.com(搜索疑难问题)
  4. 动手实操:搭建 TiDB Playground 环境实际操作

第二部分:TiDB 架构原理

2.1 整体架构

TiDB 采用纯分布式架构,将系统拆分为多个模块,各模块互相通信组成完整集群:

                      ┌──────────────┐
                      │   客户端     │
                      └──────┬───────┘
                             │ MySQL 5.7 协议
                      ┌──────▼───────┐
                      │  负载均衡     │
                      │  HAProxy 等  │
                      └──────┬───────┘
                             │
               ┌─────────────┼─────────────┐
               │             │             │
        ┌──────▼──────┐     │      ┌──────▼──────┐
        │ TiDB Server │─────┼─────▶│ TiDB Server │ ×N (无状态)
        └──┬───────┬──┘     │      └─────────────┘
           │       │        │
    ┌──────▼──┐    │        │
    │   PD    │    │        │
    │  ≥3 节点│    │        │
    └─────────┘    │        │
           ┌──────▼────────▼──────┐
           │                       │
     ┌─────▼──────┐         ┌──────▼──────┐
     │    TiKV    │         │   TiFlash   │
     │  (行存)    │         │   (列存)    │
     │  ×N 节点  │         │   ×N 节点   │
     │  Region   │         │  Raft Learner│
     │  Multi-Raft│         │   OLAP      │
     └───────────┘         └─────────────┘

2.2 五大核心优势

优势 说明
弹性扩缩容 增减节点无需停机,TiDB 无状态、TiKV 自动迁移 Region
MySQL 兼容 兼容 MySQL 5.7 协议与语法,多数场景可直接替换
默认高可用 Multi-Raft 多副本,自动容灾切换
ACID 事务 分布式事务,支持 Snapshot Isolation 隔离级别
HTAP 能力 行存 TiKV (OLTP) + 列存 TiFlash (OLAP) 实时同步

2.3 三层架构核心职责

层级 组件 职责 特性
SQL 层 TiDB Server 接收连接、SQL 解析/优化、分布式执行计划生成、KV 转换、DDL、GC 无状态,可水平扩展
调度层 PD 元数据管理、TSO 生成、事务 ID 分配、Region 调度、Dashboard 集成 etcd,至少 3 节点
存储层 TiKV / TiFlash 数据持久化存储、分布式事务、Raft 共识、MVCC 多副本,Region 分片

第三部分:核心组件详解

3.1 TiDB Server

3.1.1 核心特性

  • 无状态:不存储任何数据,支持水平扩展
  • 开发语言:Go
  • 协议兼容:兼容 MySQL 5.7
  • 可替换 MySQL:多数场景下,应用只需修改连接地址

3.1.2 七大功能

┌─────────────────────────────────────────┐
│           TiDB Server 七大功能           │
├─────────────────────────────────────────┤
│ 1. 处理客户端连接                        │
│ 2. SQL 解析和编译                       │
│ 3. 关系型数据 ↔ KV 双向转换              │
│ 4. SQL 执行                             │
│ 5. Online DDL(不阻塞读写)              │
│ 6. GC(垃圾回收,清理 MVCC 历史版本)     │
│ 7. 热点小表缓存(v6.0+)                │
└─────────────────────────────────────────┘

3.1.3 SQL 处理流程

客户端 SQL
    │
    ▼
┌──────────────┐
│ Protocol Layer │ ── 同时异步向 PD 请求 TSO
└──────┬───────┘
       ▼
┌──────────────┐
│ Parser        │ ── 词法/语法解析 → AST
└──────┬───────┘
       ▼
┌──────────────┐
│ Optimizer     │ ── CBO 代价优化 → 分布式执行计划
└──────┬───────┘
       ▼
┌──────────────┐
│ Executor      │ ── KV 转换 + 下推计算
└──────┬───────┘
       ▼
  TiKV / TiFlash(实际数据存储)

3.1.4 DDL 执行机制

  • Online DDL:DDL 不阻塞读写
  • Owner 模式:同一时刻整个集群只能有一个 TiDB Server(Owner 角色)执行 DDL
  • 非 Owner 节点收到 DDL → 持久化到 TiKV 的 job queue → Owner 的 workers 获取执行
  • Add Index 有独立队列,可与 job queue 并行执行
  • 执行完成后通过 Schema Load 通知所有 TiDB Server

3.1.5 GC(垃圾回收)机制

  • 默认每 10 分钟触发一次
  • 删除 safe point 之前的 MVCC 历史版本数据
  • safe point 由 PD 维护,等于当前 TSO 减去 tidb_gc_life_time(默认 10min)

3.1.6 热点小表缓存(v6.0+)

项目 说明
条件 表数据 ≤ 64MB
开启 ALTER TABLE users CACHE;
租约 tidb_table_cache_lease = 5s(默认)
租约内 只读,不能写
租约到期 写操作写入 TiKV,读从 TiKV 读取
限制 不支持对缓存表直接做 DDL

3.1.7 表类型与 KV 映射

类型 特点 KV 映射
聚簇表 必须有主键,数据按主键组织 主键即 Key
非聚簇表 有无主键均可 额外生成隐藏 RowID 作为 Key

3.2 PD(Placement Driver)

3.2.1 底层架构

  • 集成 etcd,用于元数据存储
  • 至少 3 个节点,建议部署奇数个
  • PD 自身也是通过 Raft 实现高可用

3.2.2 六大核心功能

┌─────────────────────────────────────────┐
│              PD 六大功能                   │
├─────────────────────────────────────────┤
│ 1. 集群元数据存储                        │
│    → 记录数据在哪些 TiKV / TiFlash 上     │
│                                         │
│ 2. 分配全局 ID 和事务 ID                 │
│                                         │
│ 3. 生成全局时间戳 TSO                    │
│    → 只能从 PD Leader 获取              │
│                                         │
│ 4. Region 调度                          │
│    → 平衡存储和 Leader 分布              │
│                                         │
│ 5. Label 标签                           │
│    → 拓扑感知调度(机房/机架/主机)       │
│                                         │
│ 6. TiDB Dashboard                       │
└─────────────────────────────────────────┘

3.2.3 TSO(全局时间戳)

  • 格式TSO = physical time + logical time
  • 类型:int64
  • 特性:保证单调递增,但不保证连续
  • 来源:只能从 PD 的 Leader 节点获取
  • 用途:为分布式事务提供全局有序的时间基准

3.2.4 Label 机制

  • 需要在 PD 和 TiKV 上同时配置
  • 支持多级标签:zone → host → dc → rack
  • 实现拓扑感知调度(跨机房容灾、就近读取)

3.3 TiKV

3.3.1 架构组成

TiKV = Transaction + MVCC + Raft + RocksDB
         事务支持     多版本  共识    存储引擎
  • 包含 两个 RocksDB 实例
    • rocksdb raft:存储 Raft 日志
    • rocksdb kv:存储实际用户数据

3.3.2 RocksDB 持久化流程

写入请求
    │
    ▼
┌──────────────┐
│   WAL 文件   │ ── 先写磁盘(sync_log=true 确保落盘)
└──────┬───────┘
       ▼
┌──────────────┐
│   MemTable   │ ── 内存表(写缓冲)
└──────┬───────┘
       ▼ (满了)
┌──────────────┐
│  Immutable   │ ── 只读内存表
│  MemTable    │
└──────┬───────┘
       ▼ (异步落盘)
┌──────────────┐
│   SST 文件   │ ── 分层存储(Level 0~N)
└──────────────┘
  • 流控机制:MemTable 写入速度远大于落盘速度时,自动降低客户端写入速度

3.3.3 Column Families(列簇)

三个列簇共享一份 WAL,各有独立的 MemTable 和 SST:

列簇 用途
Default 存储长度 ≥ 255 字节的用户数据
Write 存储长度 < 255 字节的用户数据 + 事务元信息
Lock 存储锁信息

3.3.4 Coprocessor(协处理器)

  • 核心思想:移动计算不移动数据
  • 将计算下推到 TiKV 节点执行
  • 减少网络传输量,提升查询性能

3.3.5 写入涉及的线程池

线程池/模块 职责
Scheduler 接收并发请求,通过 latch 解决同一 key 写入冲突
Raftstore 持久化 Raft 日志,向其他节点同步
Apply 从 rocksdb raft 读取日志,写入 rocksdb kv

3.4 TiFlash

3.4.1 定位

  • TiKV 的列存版本
  • 承载 OLAP 业务(QPS < 50)
  • 兼容 TiDB Server 和 TiSpark

3.4.2 数据复制

  • 使用 Raft Learner 角色与 TiKV 复制
  • Learner 不参与投票和选举,对线上业务影响小
  • Region 与 TiKV 完全对应,同步分裂与合并

3.4.3 核心功能

  1. 异步复制:基于主键快速更新
  2. 一致性读取:存储多个时间戳版本,按读取时间筛选
  3. 引擎智能选择:CBO 自动选择 TiKV/TiFlash,甚至可混合使用
  4. MPP 查询:多节点并行计算

3.4.4 MPP 执行流程

过滤(各 TiFlash 并行)
    │
    ▼
数据交换(将关联表交换到同一节点)
    │
    ▼
表连接(并行,仅等值连接)
    │
    ▼
数据交换(聚合数据交换到同一节点)
    │
    ▼
聚合(并行)

重要:MPP 只支持等值连接,所有计算在 TiFlash 内存中完成


第四部分:关键机制深入

4.1 Region 机制

4.1.1 Region 基本属性

属性
Region 大小范围 96MB ~ 144MB
默认副本数 3 副本(1 Leader + 2 Follower)
分区方式 Key Range,左闭右开 [StartKey, EndKey)

4.1.2 分裂与合并

数据增长
    │
    ▼
Region 达到 96MB → 不再插入新数据(仍可修改已有数据)
    │
    ▼
继续修改 → Region 在 96MB~144MB 波动
    │
    ▼
超过 144MB → 触发分裂 → 一分为二
    │
    ▼
各副本同步分裂

4.1.3 PD 调度职责

PD 负责以下调度操作:

调度类型 说明
Region 分裂 数据量超阈值时分裂
Region 合并 数据删除后合并
Region 迁移 节点间数据均衡
Leader 迁移 读写负载均衡

4.2 Raft 共识机制

4.2.1 Multi-Raft 架构

集群中有成千上万个 Region
每个 Region + 其副本 = 一个 Raft Group

Region1: [Leader ─ Follower ─ Follower]
Region2: [Leader ─ Follower ─ Follower]
Region3: [Leader ─ Follower ─ Follower]
  ...

4.2.2 角色分工

角色 职责
Leader 处理所有读写 I/O
Follower 只同步变化日志,不处理客户端读写

4.2.3 Raft 日志复制完整流程

① Propose    → 写 Raft 日志
② Append     → Leader 持久化到 rocksdb raft
③ Replicate  → 复制 Raft 日志到其他 TiKV
   ③.1 Append → Follower 持久化到自己的 rocksdb raft
④ Committed  → Follower 给 Leader 回应
⑤ Apply      → 各节点将数据从 rocksdb raft 写入 rocksdb kv
              → 用户提交成功

写入成功条件:Leader + 多数 Follower 写入成功

4.2.4 三种读取方式

方式 原理 特点
ReadIndex Read 获取已 commit 的 Raft 日志位置,等待 apply 完成 通用方式
Lease Read 心跳保证自己是 Leader,心跳到超时期间安全读取 性能最优
Follower Read 从 Follower 读取,可能读到最新数据 分担读压力

4.2.5 Leader 选举优化

  • 为每个节点的选举超时时间增加随机值
  • 避免多节点同时发起选举(防止活锁)

4.3 事务模型

4.3.1 分布式事务 = 两阶段提交

TiDB Server                    TiKV
    │                            │
    ▼                            │
┌──────────────┐                │
│  Prewrite    │ ── 修改数据 + 加锁 ──→ 锁写入 Lock CF
│  (预写)      │                │
└──────┬───────┘                │
       ▼                        │
┌──────────────┐                │
│  Commit      │ ── 提交 + 释放锁 ──→ 事务完成
│  (提交)      │                │
└──────────────┘                │

4.3.2 锁机制优化

  • 修改多行数据时:只给第一行加主锁,其他行的锁指向主锁
  • 减少锁管理开销

4.3.3 三种事务模式对比

模式 加锁时机 锁存储位置 特点
乐观锁 Commit 时 Prewrite TiKV 磁盘(Lock CF) 默认模式,其他事务不知道有锁
悲观锁 事务执行中 TiKV 磁盘(Lock CF) 其他事务能感知锁
内存悲观锁 (v6.0) 事务执行中 Leader 节点内存 性能最优,宕机丢锁

内存悲观锁开启方式

SET CONFIG tikv pessimistic-txn.pipelined='true';
SET CONFIG tikv pessimistic-txn.in-memory='true';

4.3.4 隔离级别

  • 默认:SI(Snapshot Isolation,快照隔离)
  • 支持 RC(Read Committed)
  • 不支持 RR(Repeatable Read)和 Serializable

4.4 MVCC(多版本并发控制)

4.4.1 原理

  • 每行数据维护多个版本
  • 不同事务读取时看到自己启动时的快照版本
  • 不阻塞新事务读取正在事务中的数据的之前已提交版本

4.4.2 版本清理

  • 由 TiDB Server 的 GC 机制负责
  • 删除 safe point 之前的历史版本
  • tidb_gc_life_time(默认 10 分钟)

4.5 HTAP 架构

4.5.1 HTAP 三大要求

1. 可扩展性  → 分布式事务 + 分布式存储
2. OLTP/OLAP 隔离 → 行存(TiKV) + 列存(TiFlash)
3. 实时性    → 行存与列存实时同步

4.5.2 引擎选择策略

场景 推荐引擎 说明
高并发 OLTP TiKV 行存,低延迟
复杂分析 OLAP TiFlash 列存,MPP 并行
混合查询 CBO 自动选择 不同表走不同引擎,结果在 TiDB Server 汇总

强制使用 TiFlash

SELECT /*+ read_from_storage(tiflash[orders]) */
    DATE(created_at), SUM(amount)
FROM orders
GROUP BY DATE(created_at);

手动设置 TiFlash 副本

ALTER TABLE orders SET TIFLASH REPLICA 1;

第五部分:安装部署与运维

5.1 TiUP 工具

5.1.1 TiUP 简介

  • TiDB 4.0 版本引入的集群运维工具
  • 包含多个组件:cluster(生产部署)、playground(本地测试)、client(客户端)

5.1.2 安装 TiUP

# 安装
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source ~/.bash_profile

# 验证
tiup --version

5.1.3 Playground(本地测试)

# 一键启动(包含 TiDB + TiKV + PD + TiFlash + Monitor)
tiup playground v7.5.0

# 指定组件版本和节点数
tiup playground v7.5.0 --db 3 --kv 3 --pd 3 --tiflash 1

5.1.4 生产部署流程

# 1. 生成配置模板
tiup cluster template --full > topology.yaml

# 2. 编辑 topology.yaml(配置各节点信息)
#    需要配置:PD servers、TiDB servers、TiKV servers、
#             TiFlash servers、Monitor servers、Grafana servers

# 3. 检查部署环境
tiup cluster check ./topology.yaml --user root -i ~/.ssh/id_rsa

# 4. 执行部署
tiup cluster deploy tidb-prod v7.5.0 ./topology.yaml --user root -p

# 5. 启动集群
tiup cluster start tidb-prod

# 6. 验证状态
tiup cluster display tidb-prod

5.1.5 topology.yaml 关键配置

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"

server_configs:
  tidb:
    log.slow-threshold: 300
  tikv:
    storage.reserve-space: "0MB"
  pd:
    schedule.leader-schedule-limit: 4

pd_servers:       # 至少 3 个,奇数
  - host: 10.0.1.11
  - host: 10.0.1.12
  - host: 10.0.1.13

tidb_servers:     # 建议 2+ 个
  - host: 10.0.1.21
  - host: 10.0.1.22

tikv_servers:     # 至少 3 个
  - host: 10.0.1.31
  - host: 10.0.1.32
  - host: 10.0.1.33

tiflash_servers:  # 可选
  - host: 10.0.1.41

monitoring_servers:
  - host: 10.0.1.51

grafana_servers:
  - host: 10.0.1.51

5.2 集群运维操作

5.2.1 日常管理命令

# 查看集群状态
tiup cluster display tidb-prod

# 启动 / 停止 / 重启
tiup cluster start tidb-prod
tiup cluster stop tidb-prod
tiup cluster restart tidb-prod

# 查看组件列表
tiup component list

# 升级集群
tiup cluster upgrade tidb-prod v7.6.0

# 查看集群日志
tiup cluster log tidb-prod

5.2.2 扩缩容

# 扩容 TiKV(创建 scale-out-tikv.yaml)
tiup cluster scale-out tidb-prod scale-out-tikv.yaml

# 缩容 TiKV(移除指定节点)
tiup cluster scale-in tidb-prod -N 10.0.1.33:20160

# 扩容 TiDB
tiup cluster scale-out tidb-prod scale-out-tidb.yaml

5.2.3 配置管理

# 修改配置(会 rolling restart)
tiup cluster edit-config tidb-prod

# 查看当前配置
tiup cluster show-config tidb-prod

# 重载配置(不重启,部分参数支持)
tiup cluster reload tidb-prod

5.2.4 数据目录规划

组件 deploy_dir(程序) data_dir(数据)
TiDB /tidb-deploy/tidb-4000 无(无状态)
PD /tidb-deploy/pd-2379 /tidb-data/pd-2379
TiKV /tidb-deploy/tikv-20160 /tidb-data/tikv-20160
TiFlash /tidb-deploy/tiflash-9000 /tidb-data/tiflash-9000

5.3 部署前置条件

5.3.1 硬件要求

组件 最低配置 推荐配置
TiDB 8C/16G 16C/32G
PD 4C/8G 8C/16G,SSD
TiKV 8C/32G/1TB SSD 32C/128G/2TB+ NVMe SSD
TiFlash 8C/32G/1TB SSD 32C/128G/2TB+ SSD
Monitor 4C/8G/500G 8C/16G/1TB

5.3.2 系统要求

# 关闭 swap
swapoff -a

# 调整文件描述符
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf

# 关闭 THP(透明大页)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 时间同步
yum install -y ntpdate
ntpdate pool.ntp.org

# SSH 互信
ssh-keygen -t rsa
ssh-copy-id tidb@10.0.1.11

5.3.3 网络端口

组件 端口 说明
TiDB 4000 SQL 服务端口
TiDB 10080 Status / Metrics
PD 2379 Client API
PD 2380 Raft 通信
TiKV 20160 服务端口
TiKV 20180 Status
TiFlash 9000 HTTP 服务
TiFlash 3930 RPC 服务
Grafana 3000 监控面板
Prometheus 9090 指标采集

第六部分:周边工具生态

6.1 Dumpling(数据导出工具)

6.1.1 功能

  • 从 MySQL / TiDB 导出数据
  • 支持 SQL / CSV / Parquet 格式
  • 支持全量 / 按库 / 按表导出

6.1.2 常用命令

# 全量导出
tiup dumpling \
  -h 127.0.0.1 -P 3306 -u root -p "" \
  -o /data/backup \
  --filetype sql

# 仅导出 Schema(不含数据)
tiup dumpling \
  -h 127.0.0.1 -P 3306 -u root \
  --no-data \
  -o /data/schema

# 指定库导出(Parquet 格式)
tiup dumpling \
  -h 127.0.0.1 -P 3306 -u root \
  --filetype parquet \
  -o /data/parquet \
  --databases db1,db2 \
  -r 200000 --threads 8

# 过滤表导出
tiup dumpling -h 127.0.0.1 -P 3306 -u root \
  -o /data/partial \
  -T db1.orders,db1.users

6.1.3 重要参数

参数 说明
-r 每个文件最大行数
--threads 导出线程数
--filetype 输出格式:sql/csv/parquet
--no-data 仅导出结构
--consistency 一致性保证:flush/lock/none
-F 分割文件大小(如 256MiB)

6.2 TiDB Lightning(数据导入工具)

6.2.1 功能

  • 将 Dumpling / CSV 导出的数据快速导入 TiDB
  • 适合全量数据迁移大规模数据导入
  • 速度远快于 SQL INSERT

6.2.2 导入模式

模式 Backend 特点 适用场景
Physical Mode local 直接写 TiKV 数据文件,极快 TB 级数据,首次导入
Logical Mode tidb 通过 SQL INSERT 导入 小数据量
Physical Mode (TiDB-backend) tidb 物理模式 + TiDB 目标 需要校验的场景

6.2.3 配置示例

[lightning]
table-concurrency = 6
index-concurrency = 2

[tikv-importer]
backend = "local"
sorted-kv-dir = "/tmp/lightning-sorted"

[mydumper]
data-source-dir = "/data/export"
no-schema = false
filter = ["*.*"]

[tidb]
host = "127.0.0.1"
port = 4000
user = "root"
pd-addr = "127.0.0.1:2379"

[checkpoint]
enable = true
driver = "file"
dsn = "/tmp/lightning_checkpoints.db"

6.2.4 执行命令

# 导入数据
tiup tidb-lightning --config lightning.toml

# 检查点错误处理(checksum mismatch)
tiup tidb-lightning-ctl --config lightning.toml --checkpoint-error-destroy=all
tiup tidb-lightning --config lightning.toml

6.3 DM(Data Migration,数据迁移平台)

6.3.1 功能

  • 将 MySQL/MariaDB 数据全量+增量迁移到 TiDB
  • 支持数据源合并(多对一)
  • 支持过滤、路由、分库分表合并

6.3.2 架构

MySQL Source 1 ─────┐
                     ├──▶ DM-master ──▶ DM-worker ──▶ TiDB
MySQL Source 2 ─────┘     (调度)       (执行迁移)

6.3.3 部署

# 编写 dm-topology.yaml
cat > dm-topology.yaml << 'EOF'
master_servers:
  - host: 10.0.1.61
    port: 8261
worker_servers:
  - host: 10.0.1.62
    port: 8262
  - host: 10.0.1.63
    port: 8262
EOF

# 部署启动
tiup dm deploy dm-cluster v7.5.0 dm-topology.yaml --user root -p
tiup dm start dm-cluster

6.3.4 迁移任务配置

name: "mysql-to-tidb"
task-mode: all   # all = 全量 + 增量

target-database:
  host: "10.0.1.21"
  port: 4000
  user: "root"
  password: ""

mysql-instances:
  - source-id: "mysql-replica-01"
    route-rules: ["route-rule-1"]
    filter-rules: ["filter-1"]

routes:
  route-rule-1:
    schema-pattern: "old_db"
    target-schema: "new_db"
    table-pattern: "t_*"
    target-table: "t_"

filters:
  filter-1:
    schema-pattern: "old_db"
    events: ["drop table", "truncate table"]
    action: Ignore

6.3.5 任务管理

# 启动任务
tiup dmctl --master-addr 10.0.1.61:8261 start-task task.yaml

# 查看状态
tiup dmctl --master-addr 10.0.1.61:8261 query-status mysql-to-tidb

# 暂停 / 恢复 / 停止
tiup dmctl --master-addr 10.0.1.61:8261 pause-task mysql-to-tidb
tiup dmctl --master-addr 10.0.1.61:8261 resume-task mysql-to-tidb
tiup dmctl --master-addr 10.0.1.61:8261 stop-task mysql-to-tidb

6.4 BR(Backup & Restore,备份恢复)

6.4.1 功能

  • TiDB 的分布式备份与恢复工具
  • 支持全量/增量备份
  • 支持多种存储后端:S3 / GCS / Azure Blob / 本地

6.4.2 全量备份

tiup br backup full \
  --pd "10.0.1.11:2379" \
  --storage "s3://bucket/backup/full-$(date +%Y%m%d)" \
  --send-credentials-to-tikv=true

6.4.3 全量恢复

tiup br restore full \
  --pd "10.0.1.11:2379" \
  --storage "s3://bucket/backup/full-20260529"

6.4.4 增量备份

# 增量备份(基于上一次全量/增量)
tiup br backup incremental \
  --pd "10.0.1.11:2379" \
  --storage "s3://bucket/backup/incr-$(date +%Y%m%d)" \
  --last-backup-ts "2026-05-28T00:00:00+08:00" \
  --send-credentials-to-tikv=true

6.4.5 库/表级别备份

# 备份指定库
tiup br backup db \
  --pd "10.0.1.11:2379" \
  --db your_db \
  --storage "local:///data/backup/your_db"

# 备份指定表
tiup br backup table \
  --pd "10.0.1.11:2379" \
  --db your_db \
  --table orders \
  --storage "local:///data/backup/orders"

6.5 CDC(Change Data Capture)

6.5.1 功能

  • 捕获 TiDB 的增量数据变更
  • 输出到下游:MySQL / Kafka / Confluent 等
  • 实现数据同步和分发

6.5.2 使用

# 创建同步任务(同步到 MySQL)
tiup cdc cli changefeed create \
  --server "http://10.0.1.21:8300" \
  --sink-uri "mysql://root:password@10.0.2.11:3306/" \
  --changefeed-id "mysql-replication"

# 查看变更流列表
tiup cdc cli changefeed list --server "http://10.0.1.21:8300"

# 暂停/恢复
tiup cdc cli changefeed pause --changefeed-id mysql-replication
tiup cdc cli changefeed resume --changefeed-id mysql-replication

6.6 sync-diff-inspector(数据校验工具)

6.6.1 功能

  • 比较两个数据库的数据一致性
  • 支持 MySQL vs TiDB、TiDB vs TiDB
  • 可生成修复 SQL

6.6.2 配置

check-thread-count = 4
export-fix-sql = true

[task]
output-dir = "./diff-output"

[data-sources.source-db]
host = "10.0.2.11"
port = 3306
user = "root"
password = ""

[data-sources.target-db]
host = "10.0.1.21"
port = 4000
user = "root"
password = ""

6.6.3 执行

./sync_diff_inspector --config=diff-config.toml
cat diff-output/summary.txt
# 如有差异 → diff-output/fix.sql

6.7 工具速查表

工具 用途 方向
Dumpling 数据导出 TiDB/MySQL → 文件
Lightning 数据导入 文件 → TiDB
DM 数据迁移 MySQL → TiDB(全量+增量)
BR 备份恢复 TiDB ↔ 存储后端
CDC 增量同步 TiDB → MySQL/Kafka
sync-diff-inspector 数据校验 DB A vs DB B
TiUP 集群管理 部署/运维/升级
TiDB Dashboard 管控界面 PD 提供,Web UI

第七部分:SQL 兼容性与应用开发

7.1 MySQL 兼容性

7.1.1 兼容的特性

  • MySQL 5.7 协议和大部分语法
  • DDL:CREATE/ALTER/DROP TABLE、INDEX
  • DML:SELECT/INSERT/UPDATE/DELETE
  • 事务:BEGIN/COMMIT/ROLLBACK
  • 大部分内置函数
  • Online DDL(不阻塞读写)

7.1.2 不兼容/需注意的特性

特性 TiDB 行为
外键 语法支持但默认不强制
存储引擎 只支持 InnoDB(无 MyISAM/Memory)
触发器 不支持
存储过程/函数 部分支持,复杂逻辑需评估
GROUP BY 默认开启 ONLY_FULL_GROUP_BY
自增 ID 分布式自增,不连续但单调递增
空间索引 部分支持
临时表 不支持真正的临时表

7.2 应用连接参数

# JDBC 推荐参数
jdbc:mysql://tidb-host:4000/your_db\
  ?useSSL=false\
  &characterEncoding=UTF-8\
  &useServerPrepStmts=true\
  &cachePrepStmts=true\
  &rewriteBatchedStatements=true\
  &connectionCollation=utf8mb4_unicode_ci

7.3 性能优化写法

-- 1. 游标分页(替代大 offset)
-- ❌ 避免
SELECT * FROM orders ORDER BY id LIMIT 100000, 20;
-- ✅ 推荐
SELECT * FROM orders WHERE id > :last_id ORDER BY id LIMIT 20;

-- 2. 批量 INSERT(开启 rewriteBatchedStatements)
INSERT INTO orders (col1, col2) VALUES (?, ?), (?, ?), (?, ?);

-- 3. 分批 DELETE(避免大事务)
DELETE FROM logs WHERE create_time < '2023-01-01' LIMIT 1000;
-- 循环执行直到影响行数为 0

-- 4. 避免热点写入:AUTO_RANDOM
CREATE TABLE orders (
    id BIGINT AUTO_RANDOM PRIMARY KEY,
    user_id INT NOT NULL
);

-- 5. 预分裂 Region
ALTER TABLE orders SPLIT BY (100000), (200000), (300000);

7.4 统计信息

-- 手动收集统计信息(迁移后或大批量数据变更后)
ANALYZE TABLE your_db.orders;

-- 设置自动收集比例
SET GLOBAL tidb_auto_analyze_ratio = 0.1;

-- 设置自动收集时间窗口
SET GLOBAL tidb_auto_analyze_start_time = '02:00 +0800';
SET GLOBAL tidb_auto_analyze_end_time   = '06:00 +0800';

第八部分:高可用与容灾

8.1 多副本机制

  • TiKV 默认 3 副本
  • 基于 Multi-Raft 共识
  • 少数副本失效 → 自动故障转移,业务无感知

8.2 PD 高可用

  • PD 至少 3 节点(奇数个)
  • PD 自身通过 Raft 实现高可用
  • PD Leader 自动选举

8.3 故障自动处理

TiKV 节点宕机
    │
    ▼
Raft Follower 超时未收到心跳
    │
    ▼
发起 Leader 选举(随机超时避免冲突)
    │
    ▼
新 Leader 上线
    │
    ▼
PD 检测副本缺失
    │
    ▼
调度其他节点补充副本

8.4 备份策略

策略 工具 频率 RPO
全量备份 BR 每日 24h
增量备份 BR 每小时 1h
实时同步 CDC 持续 ≈0

第九部分:性能调优

9.1 SQL 调优

-- 1. 查看 SQL 执行计划
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 100;

-- 2. 使用 HINT 优化
SELECT /*+ USE_INDEX(orders, idx_user_id) */ * FROM orders WHERE user_id = 100;

-- 3. 强制走 TiFlash
SELECT /*+ read_from_storage(tiflash[orders]) */ COUNT(*) FROM orders;

-- 4. 强制 MPP
SELECT /*+ hash_join_build(orders) */ * FROM orders JOIN users ON orders.user_id = users.id;

9.2 热点处理

-- 检查热点 Region
SELECT region_id, written_bytes, read_bytes
FROM information_schema.TIKV_REGION_STATUS
ORDER BY written_bytes DESC LIMIT 10;

-- 处理写热点方案
ALTER TABLE orders MODIFY id BIGINT AUTO_RANDOM;
ALTER TABLE logs SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS = 4;

9.3 关键参数调优

参数 说明 推荐值
tidb_max_txn_size 单事务大小上限 100MB
raftstore.apply-pool-size Apply 线程数 2 × CPU 核数
rocksdb.write-buffer-size RocksDB MemTable 大小 128MB
tidb_executor_concurrency 执行并发度 CPU 核数

9.4 监控指标

指标 告警阈值 工具
TiDB QPS 持续下降 Grafana → TiDB Summary
TiKV CPU > 80% Grafana → TiKV Details
TiKV 存储 > 80% Grafana → TiKV Details
慢查询 P99 > 1s Grafana → TiDB Summary
Region 健康 有 Pending Region Grafana → PD

第十部分:高频考点速记

10.1 必背数字

知识点
Region 默认大小范围 96MB ~ 144MB
TiKV 默认副本数 3 副本
PD 最少节点数 3 个(奇数)
GC 默认间隔 10 分钟
热点小表缓存阈值 ≤ 64MB
TSO 格式 physical + logical
TiDB Server 特性 无状态,可水平扩展
TiDB 默认隔离级别 SI(Snapshot Isolation)
TiDB MySQL 兼容版本 MySQL 5.7
TiKV 存储引擎 RocksDB × 2(raft + kv)

10.2 必背架构关系

客户端 → 负载均衡 → TiDB Server(无状态,Go 语言)
                      │
         ┌────────────┼────────────┐
         ▼            ▼            ▼
        PD          TiKV        TiFlash
     (etcd)      (行存)        (列存)
     ≥3 节点     Multi-Raft    Raft Learner
     TSO/元数据   Region        OLAP
                  事务/MVCC     MPP

10.3 必背流程

流程 关键步骤
Raft 写入 Propose → Append(Leader) → Replicate(Followers) → Committed → Apply
两阶段提交 Prewrite(加锁)→ Commit(释放锁)
Region 分裂 达 96MB 停止写入 → 超 144MB 触发分裂
RocksDB 写入 WAL → MemTable → Immutable → SST
SQL 处理 Parser → Optimizer(CBO) → Executor → TiKV/TiFlash

10.4 必背工具对应关系

场景 工具
部署/运维/升级 TiUP
数据导出 Dumpling
数据导入 Lightning
MySQL→TiDB 迁移 DM
备份/恢复 BR
增量同步 CDC
数据校验 sync-diff-inspector
管控界面 TiDB Dashboard(PD 提供)

10.5 易错考点

考点 易错点 正确答案
TSO 连续性 TSO 连续递增? 单调递增,不连续
PD Leader TSO 从任何 PD 获取? 只能从 Leader 获取
DDL 并发 多个 TiDB 同时执行 DDL? 同一时刻只能一个 Owner
TiDB Server 存储 TiDB 存储数据? 不存储,无状态
TiFlash 角色 TiFlash 参与投票? Learner,不投票
Column Families 3 个 CF 各自独立 WAL? 共享一份 WAL
MySQL 兼容 兼容 MySQL 8.0? 兼容 5.7
外键 TiDB 强制外键? 语法支持但不强制
自增 ID 自增 ID 连续? 不连续但单调递增
MPP 连接类型 MPP 支持所有连接? 只支持等值连接

10.6 关键命令速查

# TiUP 集群操作
tiup cluster deploy    # 部署
tiup cluster start     # 启动
tiup cluster stop      # 停止
tiup cluster restart   # 重启
tiup cluster display   # 查看状态
tiup cluster scale-out # 扩容
tiup cluster scale-in  # 缩容
tiup cluster upgrade   # 升级
tiup cluster edit-config # 修改配置

# DM 操作
tiup dmctl start-task   # 启动迁移
tiup dmctl query-status # 查看状态
tiup dmctl pause-task   # 暂停
tiup dmctl stop-task    # 停止

# BR 备份恢复
tiup br backup full     # 全量备份
tiup br restore full    # 全量恢复
tiup br backup incremental # 增量备份

# 通用连接
mysql -h 127.0.0.1 -P 4000 -u root -附录:备考资源链接
资源 链接
官方学习平台 https://learn.pingcap.com/learner/course
官方文档 https://docs.pingcap.com/zh/tidb/stable
认证中心 https://learn.pingcap.com/learner/certification-center/pcta
社区论坛 https://asktug.com
GitHub https://github.com/pingcap/tidb

祝你考试顺利,一举通过 PCTA!

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论
第一部分:考试信息1.1 考试概况1.2 考试范围三大模块1.3 备考建议第二部分:TiDB 架构原理2.1 整体架构2.2 五大核心优势2.3 三层架构核心职责第三部分:核心组件详解3.1 TiDB Server3.1.1 核心特性3.1.2 七大功能3.1.3 SQL 处理流程3.1.4 DDL 执行机制3.1.5 GC(垃圾回收)机制3.1.6 热点小表缓存(v6.0+)3.1.7 表类型与 KV 映射3.2 PD(Placement Driver)3.2.1 底层架构3.2.2 六大核心功能3.2.3 TSO(全局时间戳)3.2.4 Label 机制3.3 TiKV3.3.1 架构组成3.3.2 RocksDB 持久化流程3.3.3 Column Families(列簇)3.3.4 Coprocessor(协处理器)3.3.5 写入涉及的线程池3.4 TiFlash3.4.1 定位3.4.2 数据复制3.4.3 核心功能3.4.4 MPP 执行流程第四部分:关键机制深入4.1 Region 机制4.1.1 Region 基本属性4.1.2 分裂与合并4.1.3 PD 调度职责4.2 Raft 共识机制4.2.1 Multi-Raft 架构4.2.2 角色分工4.2.3 Raft 日志复制完整流程4.2.4 三种读取方式4.2.5 Leader 选举优化4.3 事务模型4.3.1 分布式事务 = 两阶段提交4.3.2 锁机制优化4.3.3 三种事务模式对比4.3.4 隔离级别4.4 MVCC(多版本并发控制)4.4.1 原理4.4.2 版本清理4.5 HTAP 架构4.5.1 HTAP 三大要求4.5.2 引擎选择策略第五部分:安装部署与运维5.1 TiUP 工具5.1.1 TiUP 简介5.1.2 安装 TiUP5.1.3 Playground(本地测试)5.1.4 生产部署流程5.1.5 topology.yaml 关键配置5.2 集群运维操作5.2.1 日常管理命令5.2.2 扩缩容5.2.3 配置管理5.2.4 数据目录规划5.3 部署前置条件5.3.1 硬件要求5.3.2 系统要求5.3.3 网络端口第六部分:周边工具生态6.1 Dumpling(数据导出工具)6.1.1 功能6.1.2 常用命令6.1.3 重要参数6.2 TiDB Lightning(数据导入工具)6.2.1 功能6.2.2 导入模式6.2.3 配置示例6.2.4 执行命令6.3 DM(Data Migration,数据迁移平台)6.3.1 功能6.3.2 架构6.3.3 部署6.3.4 迁移任务配置6.3.5 任务管理6.4 BR(Backup & Restore,备份恢复)6.4.1 功能6.4.2 全量备份6.4.3 全量恢复6.4.4 增量备份6.4.5 库/表级别备份6.5 CDC(Change Data Capture)6.5.1 功能6.5.2 使用6.6 sync-diff-inspector(数据校验工具)6.6.1 功能6.6.2 配置6.6.3 执行6.7 工具速查表第七部分:SQL 兼容性与应用开发7.1 MySQL 兼容性7.1.1 兼容的特性7.1.2 不兼容/需注意的特性7.2 应用连接参数7.3 性能优化写法7.4 统计信息第八部分:高可用与容灾8.1 多副本机制8.2 PD 高可用8.3 故障自动处理8.4 备份策略第九部分:性能调优9.1 SQL 调优9.2 热点处理9.3 关键参数调优9.4 监控指标第十部分:高频考点速记10.1 必背数字10.2 必背架构关系10.3 必背流程10.4 必背工具对应关系10.5 易错考点10.6 关键命令速查