搭建pxc集群中间遇到许多坑,特此记录一下
首先pull镜像
docker pull percona/percona-xtradb-cluster:5.7
对镜像重命名
docker tag percona/percona-xtradb-cluster:5.7 pxc
创建网络(用于pxc集群内部使用)
docker network create --subnet=172.30.0.0/24 pxc-network
附删除网络命令
docker network rm 你创建的网络名
查看网络
docker inspect 你创建的网络名
#创建数据卷(存储路径:/var/lib/docker/volumes)
docker volume create v1
docker volume create v2
docker volume create v3
删除数据卷
docker volume rm 你创建的数据卷的名字
查看数据卷
docker inspect 你创建的数据卷的名字
接下来创建容器
第一节点
docker create -p 13306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc-node1 --net=pxc-network --ip=172.30.0.2 pxc
第二节点(增加了CLUSTER_JOIN参数)
docker create -p 13307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc-node2 -e CLUSTER_JOIN=pxc-node1 --net=pxc-network --ip=172.30.0.3 pxc
第三节点(增加了CLUSTER_JOIN参数)
docker create -p 13308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc-node3 -e CLUSTER_JOIN=pxc-node1 --net=pxc-network --ip=172.30.0.4 pxc
-p:端口映射
-v:数据映射
启动容器(一定要注意,启动的时候要先启动第一个容器,等第一个容器能连上再去开启第二个和第三个,不然会连接不上集群)
接下来说说遇到的问题
第一个问题就是查看容器启动日志的时间,一直显示mysql初始化状态,如下图
中间试了好几次,也都是这样,后来换了一种命令创建容器
docker run -di -p 13306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc --name=pxc-node1 --net=pxc-network --ip=172.30.0.2 pxc
发现也是启动两分钟后自动断开连接
于是百度,大概说内存不够,接着清除缓存echo 3 > /proc/sys/vm/drop_caches
发现启动成功了
第二个问题来了
使用Sqlyog或Nativecat连接显示不允许连接,如下图
大概意思是mysql里的user表root账户对应的host属性是localhost
索引修改成所有都可以访问吧,也可以指定固定ip
docker exec -it pxc-node1(容器名) /bin/bash
然后进入mysql
mysql -u -root -p 发现又报了错
Access denied for user 'root'@'localhost'(using password:YES)
通过vi /etc/mysql/node.cnf
在[mysqlId]下加入skip-grant-tables 意思是跳过密码校验
重新进入mysql发现成功了
使用Sqlyog连接发现也能连成功了,找到mysql下的user表把root账户对应的host属性localhost改成%
另外修改root密码为root,执行如下命令
update user set authentication_string=PASSWORD("root") where user='root'
保存退出之后重启容器,发现就没什么问题了