TiDB 分布式 SQL 数据库教程
TiDB 是 PingCAP 开源的分布式 NewSQL 数据库,兼容 MySQL 协议,支持水平扩展和强一致性事务。TiDB 可以让你在不改变应用代码的情况下,将 MySQL 应用无缝迁移到分布式架构。本文将在搬瓦工 VPS 上使用 TiUP 工具部署 TiDB 并演示基本使用。
一、TiDB 架构概述
- TiDB Server:SQL 层,负责解析 SQL、生成执行计划、与 TiKV 交互。无状态,可水平扩展。
- TiKV:分布式 KV 存储引擎,数据自动分片(Region),每个 Region 使用 Raft 协议保证一致性。
- PD(Placement Driver):集群调度器,管理 Region 的分布和负载均衡。
二、使用 TiUP 部署
2.1 安装 TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
source ~/.bashrc
tiup --version
2.2 快速体验(Playground)
# 启动最小化集群(1 TiDB + 1 TiKV + 1 PD)
tiup playground v7.6.0 --tag mytest --db 1 --pd 1 --kv 1
# 搬瓦工低配方案优化内存参数
tiup playground v7.6.0 --tag mytest --db 1 --pd 1 --kv 1 --kv.config tiup_kv.toml --db.config tiup_db.toml
创建 TiKV 配置文件 tiup_kv.toml:
[rocksdb]
max-open-files = 256
[raftdb]
max-open-files = 256
[storage]
reserve-space = "0MB"
[storage.block-cache]
capacity = "256MB"
2.3 生产部署
创建拓扑配置文件 topology.yaml:
global:
user: "tidb"
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
pd_servers:
- host: 192.168.1.10
tidb_servers:
- host: 192.168.1.10
tikv_servers:
- host: 192.168.1.10
monitoring_servers:
- host: 192.168.1.10
grafana_servers:
- host: 192.168.1.10
tiup cluster deploy mytidb v7.6.0 topology.yaml --user root
tiup cluster start mytidb
tiup cluster display mytidb
三、连接和使用
# 使用 MySQL 客户端连接
mysql -h 127.0.0.1 -P 4000 -u root
# 创建数据库和表(完全兼容 MySQL 语法)
CREATE DATABASE myapp;
USE myapp;
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
amount DECIMAL(10, 2),
status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
);
INSERT INTO users (username, email) VALUES ('zhangwei', 'zhang@example.com');
INSERT INTO orders (user_id, amount) VALUES (1, 199.99);
四、TiDB 特有功能
# 查看 Region 分布
SELECT * FROM information_schema.tikv_region_status WHERE db_name = 'myapp' LIMIT 10;
# 自动 Region 分裂
# 当数据增长时 TiKV 会自动分裂 Region 并均衡到不同节点
# TiFlash 列式副本(HTAP 分析)
ALTER TABLE orders SET TIFLASH REPLICA 1;
# 强制使用 TiFlash 读取
SET @@tidb_isolation_read_engines = 'tiflash';
SELECT status, COUNT(*), SUM(amount) FROM orders GROUP BY status;
五、与 MySQL 的差异
- 自增 ID 不保证连续(分布式环境下使用预分配段)。
- 事务大小有限制(默认单事务 100MB)。
- 部分 MySQL 特有语法不支持(如部分存储过程功能)。
- 外键约束仅做语法兼容,不实际执行。
六、性能调优
# 查看慢查询
SELECT * FROM information_schema.slow_query WHERE query_time > 1 ORDER BY query_time DESC LIMIT 10;
# 执行计划分析
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 1 AND created_at > '2026-01-01';
# 收集统计信息
ANALYZE TABLE orders;
七、备份与恢复
# 使用 BR 工具备份
tiup br backup full --pd "192.168.1.10:2379" --storage "local:///data/backup"
# 恢复
tiup br restore full --pd "192.168.1.10:2379" --storage "local:///data/backup"
八、监控
# TiUP 部署会自动配置 Prometheus + Grafana
# Grafana 默认端口 3000,账号 admin/admin
# 查看集群状态
tiup cluster display mytidb
# 查看 TiDB 运行指标
curl http://localhost:10080/status
总结
TiDB 是将 MySQL 应用迁移到分布式架构的理想选择,MySQL 兼容性让迁移成本极低。在搬瓦工 VPS 上适合用于需要水平扩展的场景。如果你的需求更偏向分布式 PostgreSQL 兼容,可以参考 CockroachDB。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣,通过 bwh81.net 进入官网。