1 、拉取 TiDB 的 Docker 镜像,用的是v5.0.5

部署 TiDB 集群主要包括 3 个服务组件: TiDB,TiKV,PD

docker pull pingcap/tidb:v5.0.5

docker pull pingcap/tikv:v5.0.5

docker pull pingcap/pd:v5.0.5

2.创建docker私有网络:实现多个容器之间使用桥接通讯:

2.1创建一个totonet名字的私有网络,

docker network create totonet

2.2查看

docker network ls

所有的启动的容器都是用totonet网络,可以将所有的容器都桥接到该网络上,并且该网络自带dns解析,可以做到使用容器的名称直接访问容器

3.启动容器

服务启动顺序:
pd—>tikv—>tidb

服务集群有3种部署方式,可以按照性能需求部署

方法一:最简单的只有3个基础节点,(pd,tikv,tidb几个组件只能按照需求奇数增加 1,3,5等)

#PD1-----------------------------------------------------------------------------------------------
docker run -d --name pd1 --network totonet -v /etc/localtime:/etc/localtime:ro  -v /home/data/tidb/pd1:/data docker.io/pingcap/pd:v5.0.5  --name="pd1"  --data-dir="/data/pd1" --client-urls="http://0.0.0.0:2379"   --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd1:2379 --advertise-peer-urls="http://pd1:2380" --initial-cluster="pd1=http://pd1:2380"
#tikv1---------------------------------------------------------------------------------------------
docker run -d --name tikv1 --network totonet --ulimit nofile=1000000:1000000  -v /etc/localtime:/etc/localtime:ro  -v /home/data/tidb/tikv1:/data           docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv1:20160" --addr="0.0.0.0:20160"  --data-dir="/data/tikv1" --pd="pd1:2379"
#启动TiDB(1个节点)---------------------------------------------------------------------
docker  run -d  --name  tidb --network totonet  --privileged=true -p 4000:4000  -p 10080:10080    docker.io/pingcap/tidb:v5.0.5  --store=tikv  --path="pd1:2379"

参数说明:

上面的参数都是我自己部署成功的,所以是可用的,请谨慎增加或减少

--network totonet   #totonet网络 ,所有容器通过网络通信;

--name pd1 和 --name="pd1" 是不一样的,必须都有;

--name="pd1"    #当前 PD 的名字如果你需要启动多个 PD,一定要给 PD 使用不同的名字
--data-dir="/data/pd1"    #PD 存储数据路径。
--client-urls="http://pd1:2379"   # 处理客户端请求监听 URL 列表,如果是运行在 docker 则需要指定为 http://0.0.0.0:2379,或者该容器的地址
--peer-urls="http://pd1:2380"  # 处理其他 PD 节点请求监听 URL 列表。果部署一个集群,--peer-urls 必须指定当前主机的 IP 地址,如果是运行在 docker 则需要指定为 http://0.0.0.0:2380
--initial-cluster="pd1=http://pd1:2380"
#初始化 PD 集群配置。如果你需要启动三台 PD,那么 initial-cluster 可能就是 pd1=http://192.168.100.113:2380, pd2=http://192.168.100.114:2380, pd3=192.168.100.115:2380。

方法二:多节点的只有7个基础节点,(3个pd,3个tikv,1个tidb,备注:tikv目录挂载数据非常大,大约5.3G,如果要开3个tikv至少要准备17G的磁盘空间

#启动PD1
docker run -d --name pd1 --network totonet   -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5  --name="pd1"  --data-dir="/data/pd1" --client-urls="http://0.0.0.0:2379"   --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd1:2379 --advertise-peer-urls="http://pd1:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#启动PD2
docker run -d --name pd2 --network totonet   -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5  --name="pd2"  --data-dir="/data/pd2" --client-urls="http://0.0.0.0:2379"   --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd2:2379 --advertise-peer-urls="http://pd2:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#启动PD3
docker run -d --name pd3 --network totonet   -v /home/tidb:/data docker.io/pingcap/pd:v5.0.5  --name="pd3"  --data-dir="/data/pd3" --client-urls="http://0.0.0.0:2379"   --peer-urls="http://0.0.0.0:2380" --advertise-client-urls=http://pd3:2379 --advertise-peer-urls="http://pd3:2380" --initial-cluster="pd1=http://pd1:2380,pd2=http://pd2:2380,pd3=http://pd3:2380"
#启动TiKV(3个节点)
#tikv1
docker run -d --name tikv1 --network totonet   -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv1:20160" --addr="0.0.0.0:20160"  --data-dir="/data/tikv1" --pd="pd1:2379,pd2:2379,pd3:2379"
#tikv2
docker run -d --name tikv2 --network totonet   -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv2:20160" --addr="0.0.0.0:20160"  --data-dir="/data/tikv2" --pd="pd1:2379,pd2:2379,pd3:2379"
#tikv3
docker run -d --name tikv3 --network totonet   -v /home/tidb:/data docker.io/pingcap/tikv:v5.0.5 --advertise-addr="tikv3:20160" --addr="0.0.0.0:20160"  --data-dir="/data/tikv3" --pd="pd1:2379,pd2:2379,pd3:2379"
#启动TiDB(1个节点)
docker  run -d  --name  tidb --network totonet  --privileged=true -p 4000:4000  -p 10080:10080    docker.io/pingcap/tidb:v5.0.5  --store=tikv  --path="pd1:2379,pd2:2379,pd3:2379"

 参数说明:

path="pd1:2379,pd2:2379,pd3:2379"   ##PD 地址列表。TiKV 必须使用这个值连接 PD,才能正常工作

方法三:多服务器多节点集群部署

参考官网:https://docs.pingcap.com/zh/tidb/v3.0/test-deployment-using-docker/

***以上容器启动 docker ps -a 随时看一下,看是否真的启动成功,不成功 docker logs 容器 看一下日志

4.登陆tidb,用跟mysql一样的方式或编译器登陆,可以把tidb看作mysql,账号:root,端口4000,初始无密码

docker配置root密码 docker修改root密码_docker配置root密码

5.创建用户,并修改root登陆密码

#创建用户和修改密码
CREATE user 'test_rw'@'%' IDENTIFIED by 'test_rw';

#赋予权限
grant all PRIVILEGES on test.* TO 'test_rw'@'%';
FLUSH PRIVILEGES;

#修改密码root密码,必须在mysql库运行才不报错,test库运行不了,还有我运行完了root用户的密码没有立即生效,我后面重启一下容器才生效的,不知道为什么

UPDATE user set authentication_string = password('123456') where User ='root';