Docker搭建MySQL多主多从集群

环境

操作系统:win10专业版
虚拟机软件:virtualbox 6.1.10 r138449 (Qt5.6.2)
Linux版本:Linux version 3.10.0-1127.19.1.el7.x86_64
docker:Docker version 1.13.1, build 64e9980/1.13.1

配置步骤

下载镜像(这里以5.6版本为例子,其他版本类似)
docker pull mysql:5.6
创建自定义bridge网络,用于容器间的数据交换

Docker 提供了三种供用户自定义的网络驱动:bridge,overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络,由于这里是一台机器上的容器间通讯,创建bridge网络即可。Docker本身有一个网络(docker0),所以我们可以在该网段下创建自定义网络。
在这里插入图片描述

# docker network create --driver bridge --subnet [网段]/[端口号] --gateway [网关] [网络名]
docker network create --driver bridge --subnet 172.22.33.0/24 --gateway 172.22.33.1 net2

# 查看自定义网络详情
docker network inspect net1

在这里插入图片描述
启动容器时,可以为容器指定自定义网络,并设置容器在该网络下的静态ip

docker run -it --network=net2 --ip 172.22.33.5 [image_name]:[tag]
启动容器

创建4个容器,2主2从

docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 --network=net2 --ip 172.22.33.6 mysql:5.6
docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3307:3306 --network=net2 --ip 172.22.33.7 mysql:5.6
docker run --name mysql03 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3308:3306 --network=net2 --ip 172.22.33.8 mysql:5.6
docker run --name mysql04 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3309:3306 --network=net2 --ip 172.22.33.9 mysql:5.6
主从配置文件

MySQL:5.6镜像启动之后,容器中没有vim等工具,所以无法在容器中创建编辑MySQL配置文件。但是通过复制命令,我们可以把宿主机(容器的载体)中编辑好的配置文件复制到容器中,重启容器即可生效。

touch group.cnf
vim group.cnf

通用配置

[mysqld]
port=3306
skip_name_resolve = 1
skip_symbolic_links = yes
lower_case_table_names = 1
explicit_defaults_for_timestamp = ON
character_set_server = utf8
collation_server = utf8_general_ci

M1

# ***作为主库时的配置***
server_id = 1

# 开启binlog日志
log_bin = mysql-bin
binlog_format = STATEMENT

# 指定不记录日志的库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

# 自增长的数量
auto-increment-increment=2
# 偏移量
auto-increment-offset=1

# 一般情况下,从库不会将从主库获取的更新写入binlog日志,这样在做级联的时候数据不能更新,开启此项后,从库会把更新写进binlog日志。
log-slave-updates

M2

# ***作为主库时的配置***
server_id = 2

# 开启binlog日志
log_bin = mysql-bin
binlog_format = STATEMENT

# 指定不记录日志的库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

# 自增长的数量
auto-increment-increment=2
# 偏移量
auto-increment-offset=2

# 一般情况下,从库不会将从主库获取的更新写入binlog日志,这样在做级联的时候数据不能更新,开启此项后,从库会把更新写进binlog日志。
log-slave-updates

S1

# ***作为从库时的配置***
server_id = 3

# 开启中继日志
relay-log = mysql-relay

S2

# ***作为从库时的配置***
server_id = 4

# 开启中继日志
relay-log = mysql-relay

使用如下命令将配置文件复制到 “配置文件能生效的文件夹” 下,哪些文件夹有效可从容器中MySQL自带的my.cnf中查看
在这里插入图片描述
一般,把.cnf的文件拷贝到conf.d或mysql.conf.d下,新配置文件的内容就会覆盖原先的配置

# 进入容器
docker exec -it mysql01 /bin/bash

# 找到my.cnf所在位置,一般在下面这个文件夹
cd /etc/mysql

# 容器内无法使用vim查看文件内容,退出容器
exit

# 用下面的命令将group.cnf复制到容器中
docker cp group.cnf mysql01:/etc/mysql/mysql.conf.d/

# 重启MySQL或容器
docker restart mysql01
登录MySQL完成主从配置

M1、M2

# 创建slave用户并授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

# 查看master状态
show master status;

在这里插入图片描述
S1、S2

# M1的IP:172.22.33.6,M2的IP:172.22.33.7

# 登录S1,配置与主库的连接,S2的类似
CHANGE MASTER TO 
MASTER_HOST='172.22.33.6',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=120;

# 开始slave
start slave;

# 查看slave状态
show slave status/G;

看到这两项为Yes证明配置成功
在这里插入图片描述
完成了两对一主一从配置后,接下来只需将M1、M2互为主从配置一下即可。当M1挂了,M2可以顶上去。热备以及读写分离等操作需要借助如MyCat、Atlas、DBProxy等中间件,在另一篇文章中,详细描述了搭建的具体过程,有兴趣的童孩可借鉴一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值