MyCat的使用案例
需求背景描述
想对mycat进行实践操作,结合一个数据库集群是必不可少的,因为它是一款数据库中间件产品,如果没有数据库作为基础,它的存在如同空中楼阁。
所以我们在进行实践mycat案例之前,需要搭建一个数据库集群,我们这里选择比较轻量级的MySQL数据库来作为mycat数据库中间件的底层数据库集群环境。
那么如何快速搭建一个MySQL集群环境呢?使用docker容器技术将是最佳的选择。接下来我将带领大家使用docker容器技术快速的搭建一个MySQL的主从复制的集群环境。
完成了MySQL组从复制的搭建之后,我会把数据库中间件mycat也集成到MySQL集群环境中来,结合mycat中间件来对MySQL实现读写分离、垂直拆分、水平拆分等操作。
容器节点信息
使用docker启动如下容器
6个MySQL容器,3主3从;
2个mycat容器,1主1备;
2个搭建mycat高可用的HAProxy+Keepalive容器,在每台服务器上面都安装上HAProxy和Keepalive;
具体信息如下:
启动MySQL容器
拉取MySQL镜像
我们实验的时候是基于MySQL5.7.31的版本,所以我们从docker hub上拉取的时候,指定拉取的MySQL版本号。
使用如下命令拉取并查看拉取结果:
docker pull mysql:5.7.31
docker images
复制
具体示例如下所示:
➜ Data docker pull mysql:5.7.31
5.7.31: Pulling from library/mysql
bb79b6b2107f: Downloading [==> ] 1.089MB/27.09MB
49e22f6fb9f7: Download complete
842b1255668c: Downloading [===================>] 1.609MB/4.178MB
9f48d1f43000: Downloading
c693f0615bce: Waiting
8a621b9dbed2: Waiting
0807d32aef13: Waiting
6d2fc69dfa35: Waiting
56153548dd2c: Waiting
3bb6ba940303: Waiting
3e1888da91a7: Waiting
5.7.31: Pulling from library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
6d2fc69dfa35: Pull complete
56153548dd2c: Pull complete
3bb6ba940303: Pull complete
3e1888da91a7: Pull complete
Digest: sha256:b3dc8d10307ab7b9ca1a7981b1601a67e176408be618fc4216d137be37dae10b
Status: Downloaded newer image for mysql:5.7.31
docker.io/library/mysql:5.7.31
➜ Data docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.31 42cdba9f1b08 10 days ago 448MB
➜ Data
复制
准备MySQL配置文件
因为我们是使用容器启动MySQL服务,所以在启动MySQL服务之前,先准备好MySQL的配置文件,然后把配置文件挂载到容器当中,方便在后面配置主从同步的时候直接在本地挂载的目录下面修改配置文件。
我在本地的家目录下面,创建了一个dockermysqlconf文件夹,这个文件夹下面分了6个子目录文件夹,如下所示:
MySQL的配置文件目录如下:
➜ docker_mysql_conf ll
total 0
drwxr-xr-x 3 fengwenjian staff 96B 10 19 14:31 master1
drwxr-xr-x 3 fengwenjian staff 96B 10 19 14:32 master2
drwxr-xr-x 3 fengwenjian staff 96B 10 19 14:32 master3
drwxr-xr-x 3 fengwenjian staff 96B 9 29 15:49 slave1
drwxr-xr-x 3 fengwenjian staff 96B 9 29 15:50 slave2
drwxr-xr-x 3 fengwenjian staff 96B 10 18 12:17 slave3
复制
MySQL的配置文件如下:
➜ docker_mysql_conf pwd
/Users/fengwenjian/docker_mysql_conf
➜ docker_mysql_conf ll */my.cnf
-rw-r--r--@ 1 fengwenjian staff 1.3K 10 19 14:31 master1/my.cnf
-rw-r--r-- 1 fengwenjian staff 1.1K 10 19 14:32 master2/my.cnf
-rw-r--r-- 1 fengwenjian staff 1.1K 10 19 14:32 master3/my.cnf
-rw-r--r-- 1 fengwenjian staff 1.2K 9 29 15:49 slave1/my.cnf
-rw-r--r-- 1 fengwenjian staff 1.2K 9 29 15:50 slave2/my.cnf
-rw-r--r-- 1 fengwenjian staff 1.2K 10 18 12:17 slave3/my.cnf
➜ docker_mysql_conf
复制
具体每一个节点的配置文件,下面分别贴出各自my.cnf的内容
master1的my.cnf配置如下:
➜ docker_mysql_conf cat master1/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=11
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
#read_only=on
# 慢查询日志
slow_query_log=ON
#log_output=table
slow_query_log_file=/var/lib/mysql/master1-slow.log
#slow_query_log_file=/opt/mysql-5.7.29/data/slow.log
long_query_time=3
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
slave1的my.cnf配置如下:
➜ docker_mysql_conf cat slave1/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=12
# 启用二进制日志
#log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
#log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
#auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
#auto-increment-offset=1
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
read_only=on
# 启用中继日志
relay-log=mysql-relay
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
master2的my.cnf配置如下:
➜ docker_mysql_conf cat master2/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=21
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
#read_only=on
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
slave2的my.cnf配置如下:
➜ docker_mysql_conf cat slave2/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=22
# 启用二进制日志
#log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
#log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
#auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
#auto-increment-offset=1
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
read_only=on
# 启用中继日志
relay-log=mysql-relay
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
master3的my.cnf配置如下:
➜ docker_mysql_conf cat master3/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=31
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
binlog_format=row
binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
#read_only=on
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
slave3的my.cnf配置如下:
➜ docker_mysql_conf cat slave3/my.cnf
[mysqld]
# 主服务器唯一ID,使用主机IP地址的最后一个域值来作为MySQL集群中的serverid
server-id=32
# 启用二进制日志
#log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=test_slave
# 设置logbin格式
#binlog_format=STATEMENT
#binlog_format=row
#binlog_row_image=minimal
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
#log-slave-updates
#log_slave_updates=on
# 表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
#auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
#auto-increment-offset=1
# 数据库编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#collation-server=utf8mb4_unicode_ci
# 开启记录日志位置的方式为表的方式,而不是使用文件的方式。
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 从库需要配置下面的选项
read_only=on
# 启用中继日志
relay-log=mysql-relay
# 配置从库同步数据的线程数
slave_parallel_type='logical_clock'
slave_parallel_workers=6
➜ docker_mysql_conf
复制
准备虚拟网段
做这一步的原因主要是避免容器再次启动的时候,容器的IP地址变动导致,从而导致MySQL主从同步的时候出现主从节点混乱问题的发生。
一开始的时候我没有指定MySQL各个容器的IP地址和hostname,后来我验证mycat读写分离和自动切换的时候,不断的启动和停止MySQL的容器,导致同一个容器镜像重启的IP地址和第一次创建的时候IP地址不一致,进而导致MySQL主从复制的关系混乱了。所以在创建容器的时候,指定好每一个容器的IP地址和hostname。
使用下面命令创建虚拟网段
docker network create --subnet=172.19.0.0/24 mysql-cluster-network
复制
参数解释说明:
--subnet=172.19.0.0/24:指定网段
mysql-cluster-network:网段的名字
使用下面命令查看网段内容:
docker inspect mysql-cluster-network
docker network ls
复制
网段创建示例:
➜ docker_mysql_conf docker network ls
NETWORK ID NAME DRIVER SCOPE
c2c0f3ce99ae bridge bridge local
20a529083ab9 host host local
e550bcb69d18 none null local
➜ docker_mysql_conf
➜ docker_mysql_conf docker network create --subnet=172.19.0.0/24 mysql-cluster-network
3192d3b2360eedf304023e616a7256254622031368d215146e6b28a09a11932f
➜ docker_mysql_conf
➜ docker_mysql_conf docker network ls
NETWORK ID NAME DRIVER SCOPE
c2c0f3ce99ae bridge bridge local
20a529083ab9 host host local
3192d3b2360e mysql-cluster-network bridge local
e550bcb69d18 none null local
➜ docker_mysql_conf
复制
启动MySQL容器
使用docker run命令启动容器,具体命令参考如下。
启动MySQL容器的命令如下:
docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31
docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31
docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31
docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31
docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31
docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
复制
创建示例如下:
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname master1.mysql --ip 172.19.0.11 --name mysql-master1 -d -v /Users/fengwenjian/docker_mysql_conf/master1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3311:3306 mysql:5.7.31
f3a642b89001be6c066c293721a4024dcc3ad4ebc65a4e3076ebfc0ec8077d6f
➜ docker_mysql_conf
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave1.mysql --ip 172.19.0.12 --name mysql-slave1 -d -v /Users/fengwenjian/docker_mysql_conf/slave1:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3312:3306 mysql:5.7.31
cb5c2dbb291b7e25756b4ed2b2851aa8ca4ac312992955db88454e46b0059b98
➜ docker_mysql_conf
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname master2.mysql --ip 172.19.0.21 --name mysql-master2 -d -v /Users/fengwenjian/docker_mysql_conf/master2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3321:3306 mysql:5.7.31
0756b65f118821f80cc396d4e80b7c7aa14c5a07a82637022a927dbef93e892e
➜ docker_mysql_conf
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave2.mysql --ip 172.19.0.22 --name mysql-slave2 -d -v /Users/fengwenjian/docker_mysql_conf/slave2:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3322:3306 mysql:5.7.31
87e4940f6e2c8acafcdb42d673de2b55986870ebaaa779613480c5479dfaae6a
➜ docker_mysql_conf
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname master3.mysql --ip 172.19.0.31 --name mysql-master3 -d -v /Users/fengwenjian/docker_mysql_conf/master3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3331:3306 mysql:5.7.31
5841f97bc021358ab9d355521749d6c905a49ff6ac79e7617da910d8b1d6f1ef
➜ docker_mysql_conf
➜ docker_mysql_conf docker run --net=mysql-cluster-network --hostname slave3.mysql --ip 172.19.0.32 --name mysql-slave3 -d -v /Users/fengwenjian/docker_mysql_conf/slave3:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -e TZ="Asia/Shanghai" -p 3332:3306 mysql:5.7.31
8a54ec54de08f7c3fb5e8771ded7195d6593fbb633269a51f72e46f6c9970c71
➜ docker_mysql_conf
复制
容器启动后的结果如下所示:
➜ docker_mysql_conf docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a54ec54de08 mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3332->3306/tcp mysql-slave3
5841f97bc021 mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3331->3306/tcp mysql-master3
87e4940f6e2c mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3322->3306/tcp mysql-slave2
0756b65f1188 mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3321->3306/tcp mysql-master2
cb5c2dbb291b mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3312->3306/tcp mysql-slave1
f3a642b89001 mysql:5.7.31 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:3311->3306/tcp mysql-master1
➜ docker_mysql_conf
复制
查看各个容器启动后的主机名称和IP地址,结果如下所示:
从下面的结果可以看出,每一个MySQL数据库实例的IP地址和主机名称和我们前面规划的IP地址和主机名称是可以对上的。
➜ docker_mysql_conf docker exec mysql-master1 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.11 master1.mysql master1
➜ docker_mysql_conf
➜ docker_mysql_conf docker exec mysql-slave1 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.12 slave1.mysql slave1
➜ docker_mysql_conf
➜ docker_mysql_conf docker exec mysql-master2 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.21 master2.mysql master2
➜ docker_mysql_conf
➜ docker_mysql_conf docker exec mysql-slave2 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.22 slave2.mysql slave2
➜ docker_mysql_conf
➜ docker_mysql_conf docker exec mysql-master3 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.31 master3.mysql master3
➜ docker_mysql_conf
➜ docker_mysql_conf docker exec mysql-slave3 /bin/cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.32 slave3.mysql slave3
➜ docker_mysql_conf
复制
连接MySQL服务
在本地使用mysql命令来连接MySQL服务,测试是否可以正常连接到各个MySQL实例。各个MySQL服务实例,用端口号来区分开来。
使用如下命令来连接MySQL服务
# 登录master1
mysql -uroot -proot -P3311 -h127.0.0.1
# 登录slave1
mysql -uroot -proot -P3312 -h127.0.0.1
# 登录master2
mysql -uroot -proot -P3321 -h127.0.0.1
# 登录slave2
mysql -uroot -proot -P3322 -h127.0.0.1
# 登录master3
mysql -uroot -proot -P3331 -h127.0.0.1
# 登录slave3
mysql -uroot -proot -P3332 -h127.0.0.1
复制
微信搜索“coder-home”或扫一扫下面的二维码,
关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我。