MyCat入门篇-使用案例1:读写分离(part1)

前置文章:MyCat入门篇-下载安装

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;

具体信息如下:

序号主机名称IP地址角色简称MySQL用户名MySQL密码容器内端口容器外映射端口
1master1.mysql172.19.0.11主节点1M1rootroot33063311
2slave1.mysql172.19.0.12从节点1S1rootroot33063312
3master2.mysql172.19.0.21主节点2M2rootroot33063321
4slave2.mysql172.19.0.22从节点2S2rootroot33063322
5master3.mysql172.19.0.31主节点3M3rootroot33063331
6slave3.mysql172.19.0.32从节点3S3rootroot33063332
7mycat1.mycat172.19.0.41mycat主节点1MY1mycatmycat8066,90668041,9041
8mycat2.mycat172.19.0.42mycat备用节点MY2mycatmycat8066,90668042,9042
9haproxy1.mysql172.19.0.51节点1HK1
10keepalive1.mysql172.19.0.51节点1HK1
11haproxy2.mysql172.19.0.52节点2HK2
12keepalive2.mysql172.19.0.52节点2HK2

整体网络拓扑如下所示:
在这里插入图片描述

启动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的配置文件,然后把配置文件挂载到容器当中,方便在后面配置主从同步的时候直接在本地挂载的目录下面修改配置文件。

我在本地的家目录下面,创建了一个docker_mysql_conf文件夹,这个文件夹下面分了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

参数解释说明:

  1. –subnet=172.19.0.0/24:指定网段
  2. 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

到此为止,MySQL集群各个容器已经成功启动,并且能够正常访问各个容器。

后续会配置他们的主从同步和验证主从同步的效果。敬请期待…​


微信搜索“coder-home”或扫一扫下面的二维码,
关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值