文章目录
- 一、TiDB概述
- 1、简介
- 2、OLAP和OLTP
- 3、与MySQL兼容性
- 二、架构
- 三、安装
- 1、本地版安装
- 2、单机版集群安装
- 2.1 概述
- 2.2 安装
- 2.3 访问集群
- 3、配置文件地址
- 四、使用方式
- 1、基础SQL
- 2、历史数据查询
一、TiDB概述
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb
TiDB可以理解为是MySQL的加强版/分布式MySQL/MySQLPlus
1、简介
TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。
TiDB数据库具备「分布式强一致性事务、在线弹性水平扩展、故障自恢复的高可用、跨数据中心多活」等核心特性,是大数据时代理想的数据库集群和云数据库解决方案。目前,已被近 1000 家不同行业的领先企业应用在实际生产环境,涉及互联网、游戏、银行、保险、证券、航空、制造业、电信、新零售、政府等多个行业,包括美国、欧洲、日本、东南亚等海外用户。
TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景,更复杂的 OLAP 分析可以通过 TiSpark 项目来完成。
TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力。
2、OLAP和OLTP
- OLTP
强调支持短时间内大量并发的事务操作(增删改查)能力,每个操作涉及的数据量都很小(比如几十到几百字节)
强调事务的强一致性(想想银行转账交易,容不得差错)
- OLAP
偏向于复杂的只读查询,读取海量数据进行分析计算,查询时间往往很长
代表产品:
- Greenplum
- TeraData
- 阿里 AnalyticDB
3、与MySQL兼容性
TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。MySQL 5.7 生态中的系统工具(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客户端等均适用于 TiDB。
但 TiDB 尚未支持一些 MySQL 功能,可能的原因如下:
- 有更好的解决方案,例如 JSON 取代 XML 函数。
- 目前对这些功能的需求度不高,例如存储流程和函数。
- 一些功能在分布式系统上的实现难度较大。
除此以外,TiDB 不支持 MySQL 复制协议,但提供了专用工具用于与 MySQL 复制数据:
二、架构
TiDB 集群主要包括三个核心组件:TiDB Server
,PD Server
和 TiKV Server
。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark
组件和简化云上部署管理的 TiDB Operator
组件。
- TiDB Server:接受SQL请求,与客户端交互(计算能力)。
- PD Server:集群管理者。
- TiKV Server:真正存储数据的(存储能力)。
- TiSpark:解决复杂OLAP查询。
- TiDB Operator:云上部署组件。
内部架构
与外界架构
三、安装
1、本地版安装
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb
TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 TiDB 实例、3 个 TiKV 实例、3 个 PD 实例和可选的 TiFlash 实例构成。通过 TiUP Playground,可以快速搭建出上述的一套基础测试集群,步骤如下:
- 下载并安装 TiUP。
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
- 声明全局环境变量。
source ${your_shell_profile}
source /root/.bash_profile
- 在当前 session 执行以下命令启动集群
直接运行 tiup playground
命令会运行最新版本的 TiDB 集群,其中 TiDB、TiKV、PD 和 TiFlash 实例各 1 个:
tiup playground
指定 TiDB 版本以及各组件实例个数
tiup playground v6.5.2 --db 2 --pd 3 --kv 3
这样就安装完成。但是只能本机访问:
- 新开启一个 session 以访问 TiDB 数据库。
tiup client
或
mysql --host 127.0.0.1 --port 4000 -u root
- 通过
http://127.0.0.1:9090
访问 TiDB 的 Prometheus 管理界面。 - 通过
http://127.0.0.1:2379/dashboard
访问TiDB Dashboard
页面,默认用户名为root
,密码为空。 - 通过
http://127.0.0.1:3000
访问 TiDB 的 Grafana 界面,默认用户名和密码都为admin
。 - (可选)将数据加载到 TiFlash 进行分析。
- 测试完成之后,可以通过执行以下步骤来清理集群:
tiup clean --all
2、单机版集群安装
2.1 概述
https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb
- 适用场景:希望用单台 Linux 服务器,体验 TiDB 最小的完整拓扑的集群,并模拟生产环境下的部署步骤。
实例 | 个数 | IP | 配置 |
TiKV | 3 | 10.0.1.1 10.0.1.1 10.0.1.1 | 避免端口和目录冲突 |
TiDB | 1 | 10.0.1.1 | 默认端口 全局目录配置 |
PD | 1 | 10.0.1.1 | 默认端口 全局目录配置 |
TiFlash | 1 | 10.0.1.1 | 默认端口 全局目录配置 |
Monitor | 1 | 10.0.1.1 | 默认端口 全局目录配置 |
2.2 安装
- 下载并安装 TiUP:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
- 声明全局环境变量:
source ${your_shell_profile}
source /root/.bash_profile
- 安装 TiUP 的 cluster 组件:
tiup cluster
- 如果机器已经安装 TiUP cluster,需要更新软件版本:
tiup update --self && tiup update cluster
- 由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制:
修改 /etc/ssh/sshd_config
将 MaxSessions
调至 20。
#MaxAuthTries 6
MaxSessions 20
重启 sshd 服务:
service sshd restart
- 创建并启动集群
按下面的配置模板,编辑配置文件,命名为 topo.yaml
,其中:
-
user: "tidb"
:表示通过tidb
系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器 -
replication.enable-placement-rules
:设置这个 PD 参数来确保 TiFlash 正常运行 -
host
:设置为本部署主机的 IP
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
server_configs:
tidb:
log.slow-threshold: 300
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
replication.enable-placement-rules: true
replication.location-labels: ["host"]
tiflash:
logger.level: "info"
pd_servers:
- host: 127.0.0.1
tidb_servers:
- host: 127.0.0.1
tikv_servers:
- host: 127.0.0.1
port: 20160
status_port: 20180
config:
server.labels: { host: "logic-host-1" }
- host: 127.0.0.1
port: 20161
status_port: 20181
config:
server.labels: { host: "logic-host-2" }
- host: 127.0.0.1
port: 20162
status_port: 20182
config:
server.labels: { host: "logic-host-3" }
tiflash_servers:
- host: 127.0.0.1
monitoring_servers:
- host: 127.0.0.1
grafana_servers:
- host: 127.0.0.1
- 执行集群部署命令:
- 参数
<cluster-name>
表示设置集群名称 - 参数
<version>
表示设置集群版本,例如v6.5.2
。可以通过tiup list tidb
命令来查看当前支持部署的 TiDB 版本 - 参数
-p
表示在连接目标机器时使用密码登录(本机登录密码)
tiup cluster deploy <cluster-name> <version> ./topo.yaml --user root -p
tiup cluster deploy mytidb v6.5.2 ./topo.yaml --user root -p
按照引导,输入”y”及 root 密码,来完成部署:
Do you want to continue? [y/N]: y
Input SSH password:
- 启动集群:
tiup cluster start <cluster-name>
tiup cluster start mytidb
2.3 访问集群
安装 MySQL 客户端。
yum -y install mysql
- 访问 TiDB 数据库,密码为空:
mysql -h 10.0.1.1 -P 4000 -u root
- 访问 TiDB 的 Grafana 监控
通过 http://{grafana-ip}:3000 访问集群 Grafana 监控页面,默认用户名和密码均为 admin
。
- 访问 TiDB 的 Dashboard:
通过 http://{pd-ip}:2379/dashboard 访问集群 TiDB Dashboard 监控页面,默认用户名为 root
,密码为空。
- 查看已部署集群列表
tiup cluster list
- 执行以下命令查看集群的拓扑结构和状态:
tiup cluster display <cluster-name>
3、配置文件地址
四、使用方式
1、基础SQL
https://docs.pingcap.com/zh/tidb/stable/basic-sql-operations
SQL 语言通常按照功能划分成以下的 4 个部分:
- DDL (Data Definition Language):数据定义语言,用来定义数据库对象,包括库、表、视图和索引等。
- DML (Data Manipulation Language):数据操作语言,用来操作和业务相关的记录。
- DQL (Data Query Language):数据查询语言,用来查询经过条件筛选的记录。
- DCL (Data Control Language):数据控制语言,用来定义访问权限和安全级别。
常用的 DDL 功能是对象(如表、索引等)的创建、属性修改和删除,对应的命令分别是 CREATE、ALTER 和 DROP。
2、历史数据查询
为支持读取历史版本数据,TiDB 引入了一个新的系统变量 tidb_snapshot:
- 这个变量的作用域为
SESSION
。 - 你可以通过标准的
SET
语句修改这个变量的值。 - 这个变量的数据类型为文本类型,能够存储 TSO 和日期时间。TSO 是从 PD 端获取的全局授时的时间戳,日期时间的格式为:“2016-10-08 16:45:26.999”,一般来说可以只写到秒,比如”2016-10-08 16:45:26”。
- 当这个变量被设置时,TiDB 会按照设置的时间戳建立 Snapshot(没有开销,只是创建数据结构),随后所有的
SELECT
操作都会从这个 Snapshot 上读取数据。
当读取历史版本操作结束后,可以结束当前 Session 或者是通过 SET 语句将 tidb_snapshot 变量的值设为 “”,即可读取最新版本的数据。
历史数据保留策略
TiDB 使用 MVCC 管理版本,当更新/删除数据时,不会做真正的数据删除,只会添加一个新版本数据,所以可以保留历史数据。历史数据不会全部保留,超过一定时间的历史数据会被彻底删除,以减小空间占用以及避免历史版本过多引入的性能开销。
- 查看表中的数据:
SELECT * from t;
# 2023-05-14 15:18:51
SELECT NOW();
+------+
| c |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
- 更新数据
UPDATE t SET c=22 WHERE c=2;
# 2023-05-14 15:19:53
SELECT NOW();
SELECT * from t;
+------+
| c |
+------+
| 1 |
| 22 |
| 3 |
+------+
3 rows in set (0.00 sec)
- 查询某一时刻数据
set @@tidb_snapshot="2023-05-14 15:18:51";
# 1,2,3
SELECT * FROM t;
+------+
| c |
+------+
| 1 |
| 22 |
| 3 |
+------+
3 rows in set (0.00 sec)
- 清空这个变量后,即可读取最新版本数据:
set @@tidb_snapshot="";
# 1,22,3
SELECT * FROM t;
+------+
| c |
+------+
| 1 |
| 22 |
| 3 |
+------+
3 rows in set (0.00 sec)