1、安装mysql集群(PXC)
docker pull percona/percona-xtradb-cluster
2、创建docker内部网络
docker network create --subnet=172.18.0.0/16 net1
查看刚才创建的网络
docker network inspect net1
3、创建docker卷
docker volume create --name v1
docker volume create --name v2
...
创建备份数据卷(用于热备份数据)
docker volume create --name backup
查看刚才创建好的卷
docker inspect v1
4、创建节点
docker run -di -p 3306:3306 \
-v v1:/var/lib/mysql \
-v backup:/data \
-e MYSQL_ROOT_PASSWORD=960930 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=960930 \
--privileged=true --name=node1 --net=net1 --ip 172.18.0.2 \
pxc
docker run -di -p 3307:3306 \
-v v2:/var/lib/mysql \
-v backup:/data \
-e MYSQL_ROOT_PASSWORD=960930 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=960930 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node2 --net=net1 --ip 172.18.0.3 \
pxc
docker run -di -p 3308:3306 \
-v v3:/var/lib/mysql \
-v backup:/data \
-e MYSQL_ROOT_PASSWORD=960930 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=960930 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node3 --net=net1 --ip 172.18.0.4 \
pxc
docker run -di -p 3309:3306 \
-v v4:/var/lib/mysql \
-v backup:/data \
-e MYSQL_ROOT_PASSWORD=960930 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=960930 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node4 --net=net1 --ip 172.18.0.5 \
pxc
docker run -di -p 3310:3306 \
-v v5:/var/lib/mysql \
-v backup:/data \
-e MYSQL_ROOT_PASSWORD=960930 \
-e CLUSTER_NAME=PXC \
-e XTRABACKUP_PASSWORD=960930 \
-e CLUSTER_JOIN=node1 \
--privileged=true --name=node5 --net=net1 --ip 172.18.0.6 \
pxc
第一个节点创建比较慢需要几分钟,如遇到以下几个错误:
-
1. 连接出错,查看mysql所在的主机端口是否打开,例如阿里云服务器的安全组端口是否开放,例如3306端口
-
2.远程连接被拒绝, 查看mysql是否允许被远程连接
查询用户表命令:select User,authentication_string,Host from user;
(如果默认都是localhost访问权限)。 则可以创建可以访问的用户名即密码
GRANT ALL PRIVILEGES ON *.* TO '账号'@'%' IDENTIFIED BY '密码';
%代表所有主机,也可以具体到你的主机IP地址
注:用户名处,填写自己的用户名, 密码处,填写自己访问的密码
-
3.依赖节点1的节点都闪退,启动不起来
docker exec -it node1 bash
进入第一个节点容器
如果进入容器后使用mysql指令出现异常 unknown option --ck;需要先修改容器内mysql配置文件node.cnf , 打开配置文件vi /etc /mysql/node.cnf
将[client]下的‘ck’删除即可。
more /var/lib/mysql/innobackup.backup.log
查看日志
cat /etc/mysql/node.cnf
查看配置 连接密码
发现是用户的问题:没有xtrabackup用户
进入第一个节点,连接mysql 创建xtrabackup用户,授权远程访问,刷新
create user xtrabackup identified by 'password'; //这里的password即上面查看的连接密码
mysql -u root
grant all on *.* to 'xtrabackup'@'%' identified by 'password';
flush privileges; //刷新授权