2024年猿创征文|分布式国产数据库 TiDB 从入门到实战_查看tidb版本

写在前面

本文讲解的是目前欢迎程度最高分布式国产数据库 TiDB,详细讲解了 TiDB 的由来、架构、SQL 基本操作、SpringBoot 整合 TiDB 等内容。

目录

一、概述

在这里插入图片描述

TiDB 是 PingCAP 公司使用 Go 语言自主设计、研发的开源分布式关系型数据库,它基于 Google 公司的 Google Spanner / F1 论文设计的开源分布式数据库,是一款结合了传统的关系型数据库NoSQL数据库特性的新型分布式数据库。

TiDB 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 32k多个star5k多的fork

TiDB 作为国产新兴数据库,与传统的单机数据库相比,TiDB 具有以下优势:

  • 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
  • 支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
  • 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
  • 支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
  • 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

如下是 TiDB 数据库的架构图:

在这里插入图片描述

  • TiDB Server: SQL 层。负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。
  • PD (Placement Driver) Server: 整个 TiDB 集群的大脑。负责调度 TiKV 节点,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。
  • Storage(存储节点):存储节点分为 TiKV 和 TiFlash。
    • TiKV: 负责存储数据,数据行存的,对有事务需求的数据友好。
    • TiFlash: 列式存储,对于统计分析友好。可以将统计查询,经常做暴力扫描类型的业务数据存入TiFlash。

二、与 MySQL 兼容性对比

目前大多数企业项目使用的数据库为MySQL数据库,对于与 MySQL 兼容性的支持是非常重要的。

TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。MySQL 5.7 生态中的系统工具 (PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客户端等均适用于 TiDB。

高度兼容的同时,也有一些不支持的功能特性。大家在使用时,一定要非常注意的地方。

  • 存储过程与函数
  • 触发器
  • 事件
  • 自定义函数
  • 外键约束
  • 全文语法与索引
  • 空间类型的函数(即 GIS/GEOMETRY)、数据类型和索引
  • asciilatin1binaryutf8utf8mb4gbk 的字符集
  • SYS schema
  • MySQL 追踪优化器
  • XML 函数
  • X-Protocol
  • Savepoints
  • 列级权限
  • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)
  • CREATE TABLE tblName AS SELECT stmt 语法
  • CHECK TABLE 语法
  • CHECKSUM TABLE 语法
  • REPAIR TABLE 语法
  • OPTIMIZE TABLE 语法
  • HANDLER 语句
  • CREATE TABLESPACE 语句

大家在对技术选型,或者技术更迭的时候,一定要做好充分的兼容测试,尽可能的避免在中途出现不可控的问题。

三、安装使用

目前 TiDB 仅支持 macOS 和 Linux 系统。

注意:使用 Linux 请一定要用 CentOS 7.6 及以上系统,我开始使用 Ubuntu 22.04 LTS 版本,会出现部署不了的情况,也出现部署安装完成后,启动不了,接着切换到 CentOS 7.9 的系统,可以顺利安装启动。

这里本来想使用Docker Compose方式安装的,但是看官网说仅用于测试,不能用于生产,就放弃使用这种方式了。原文:警告:这仅用于测试,请勿在生产中使用!

环境准备:

  • 推荐安装 CentOS 7.6 及以上版本
  • 运行环境可以支持互联网访问,用于下载 TiDB 及相关软件安装包

1)、下载并安装 TiUP

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7085k  100 7085k    0     0  8205k      0 --:--:-- --:--:-- --:--:-- 8201k
WARN: adding root certificate via internet: https://tiup-mirrors.pingcap.com/root.json
You can revoke this by remove /root/.tiup/bin/7b8e153f2e2d0928.root.json
Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: bash
Shell profile:  /root/.bash_profile
/root/.bash_profile has been modified to add tiup to PATH
open a new terminal or source /root/.bash_profile to use it
Installed path: /root/.tiup/bin/tiup
===============================================
Have a try:     tiup playground
==============================================

2)、声明全局环境变量

TiUP 安装完成后会提示对应 Shell profile 文件的绝对路径。

我的是:/root/.bash_profile

source /root/.bash_profile

3)、安装 TiUP 的 cluster 组件

tiup cluster

如果机器已经安装 TiUP cluster,需要更新软件版本:

tiup update --self && tiup update cluster

4)、增大 sshd 服务连接数

由于模拟多机部署,需要通过 root 用户调大 sshd 服务的连接数限制:

  • 修改 /etc/ssh/sshd_configMaxSessions 调至 20。
  • 重启 sshd 服务:
service sshd restart

5)、创建并启动集群

创建目录

mkdir -p /usr/local/tidb

cd /usr/local/tidb/

创建配置文件 topo.yaml。配置模板如下:

# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
 user: "tidb"
 ssh\_port: 22
 deploy\_dir: "/tidb-deploy"
 data\_dir: "/tidb-data"

# # Monitored variables are applied to all the machines.
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: 192.168.110.134

tidb\_servers:
 - host: 192.168.110.134

tikv\_servers:
 - host: 192.168.110.134
   port: 20160
   status\_port: 20180
   config:
     server.labels: { host: "logic-host-1" }

 - host: 192.168.110.134
   port: 20161
   status\_port: 20181
   config:
     server.labels: { host: "logic-host-2" }

 - host: 192.168.110.134
   port: 20162
   status\_port: 20182
   config:
     server.labels: { host: "logic-host-3" }

tiflash\_servers:
 - host: 192.168.110.134

monitoring\_servers:
 - host: 192.168.110.134

grafana\_servers:
 - host: 192.168.110.134

  • user: "tidb":表示通过 tidb 系统用户(部署会自动创建)来做集群的内部管理,默认使用 22 端口通过 ssh 登录目标机器
  • replication.enable-placement-rules:设置这个 PD 参数来确保 TiFlash 正常运行
  • host:设置为本部署主机的 IP。(更改为自己机器IP)

6)、部署集群

命令格式为:

tiup cluster deploy <cluster-name> <tidb-version> ./topo.yaml --user root -p

  • <cluster-name>:需设置的集群名称
  • <tidb-version>:需设置的集群版本。可以通过 tiup list tidb 命令来查看当前支持部署的 TiDB 版本
  • -p :表示在连接目标机器时使用密码登录

首先使用tiup list tidb命令查看 TiDB 版本

tiup list tidb

我们这里就使用最新稳定版 v6.3.0

执行集群部署命令:

tiup cluster deploy my-tidb v6.3.0 ./topo.yaml --user root -p

此命令需要在 topo.yaml 目录执行

执行后,会提示让你输入 SSH 密码,也就是你的登录密码。

$ tiup cluster deploy my-tidb v6.3.0 ./topo.yaml --user root -p
tiup is checking updates for component cluster ...
Starting component `cluster`: /root/.tiup/components/cluster/v1.11.0/tiup-cluster deploy my-tidb v6.3.0 ./topo.yaml --user root -p
Input SSH password:

然后根据提示,输入 y 后,等待部署完成

Do you want to continue? [y/N]: (default=N)

安装程序跑完后,记得看一下是否所有的组件都成功安装,如果安装失败,根据提示查看日志进行解决。

7)、启动集群

命令格式:

tiup cluster start <cluster-name>

执行命令:

tiup cluster start my-tidb

8)、客户端访问

一定要关闭防火墙在进行测试

使用 Navicat 客户端连接工具,选择MySQL方式连接。连接成功。

在这里插入图片描述

使用 SQLyog 也可以连接成功。

在这里插入图片描述

9)、Grafana 监控页面

访问地址:

http://IP:3000

默认用户名和密码均为 admin

在这里插入图片描述

10)、TiDB 的 Dashboard

访问地址:

http://IP:2379/dashboard

默认用户名为 root,密码为空。

在这里插入图片描述
在这里插入图片描述

有很多实用的功能,可以查看 QPS、慢查询、流量查询等。可以帮助我们快速的定位问题。

四、SQL 基本操作

安装好 TiDB 后,便可以在 TiDB 中执行 SQL 语句了。我这里直接使用大家常用的 Navicat 进行操作了。

因为 TiDB 兼容 MySQL,我们可以像操作 MySQL 一样操作 TiDB。

4.1、库操作

1)、查看数据库列表

SHOW DATABASES;

在这里插入图片描述

2)、创建数据库

CREATE DATABASE IF NOT EXISTS my_db;

添加 IF NOT EXISTS 可防止发生错误。

3)、切换数据库

USE my_db;

4)、删除数据库

DROP DATABASE my_db;

5)、查看数据库下所有的表

SHOW TABLES FROM my_db;

4.2、表操作

1)、创建表

语法格式:

CREATE TABLE table_name column_name data_type constraint;

创建 sys_user

CREATE TABLE sys_user (
    id INT(11),
    name VARCHAR(255),
    birthday DATE
);

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

4.2、表操作

1)、创建表

语法格式:

CREATE TABLE table_name column_name data_type constraint;

创建 sys_user

CREATE TABLE sys_user (
    id INT(11),
    name VARCHAR(255),
    birthday DATE
);

[外链图片转存中…(img-vl2me7Z8-1714693652437)]
[外链图片转存中…(img-NL3CCE0I-1714693652438)]
[外链图片转存中…(img-wkXxA5qU-1714693652438)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值