Docker下MySQL的安装(双主双从)
实验前应在本机的/home/目录下创建mysql文件夹

# mysql1存放mastermysql1的配置文件
# mysql2存放mastermysql2的配置文件
# mysql3存放slavemysql1的配置文件
# mysql4存放slavemysql2的配置文件
sudo mkdir -p /home/mysql/docker-data/mysql1
sudo mkdir -p /home/mysql/docker-data/mysql2
sudo mkdir -p /home/mysql/docker-data/mysql3
sudo mkdir -p /home/mysql/docker-data/mysql4

创建完成之后目录结构是这样的,
每个目录下都是需要这样创建,
这四个目录也可以分别创建在不同的服务器,这里为了节省服务器用的一个
在这里插入图片描述
在MySQL配置文件夹下创建对应的配置文件
或将我的配置文件放进去,本文操作的相关文件在本文前言,拿出来改改即可进行实验测试

mysql1目录下的my.cnf---------主节点1

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
symbolic-links=0
#驼峰命名
lower_case_table_names=1
#主服务器唯一ID
server-id=4122
#启动二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可以设置为多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 我的是数据库叫ymq,如果不指定就是默认全部
#binlog-do-db=ymq
#设置logbin格式 STATEMENT & ROW & MIXED
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto_increment_offset=1

mysql2目录下的my.cnf---------主节点2

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
symbolic-links=0
#驼峰命名
lower_case_table_names=1
#主服务器唯一ID
server-id=4123
#启动二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可以设置为多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 我的是数据库叫ymq
#binlog-do-db=ymq
#设置logbin格式 STATEMENT & ROW & MIXED
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
#表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto_increment_offset=2

mysql3目录下的my.cnf ----------从节点1

[mysqld]
#主服务器唯一ID
server-id=4124
#启用中继日志
relay-log=mysql-relay

mysql4目录下的my.cnf ----------从节点2

[mysqld]
#主服务器唯一ID
server-id=4125
#启用中继日志
relay-log=mysql-relay

在这里插入图片描述
2.配置镜像加速,拉取阿里仓库镜像很快
在这里插入图片描述

拉取MySQL5.7镜像

docker pull mysql:5.7
#可以查看一下镜像文件
docker iamges

Docker创建对应的MySQL容器
运行下面命令创建MySQL容器

相关的配置参数解释在 https://www.cnblogs.com/yumq/p/14253360.html

安装mastermysql1

docker run --name mastermysql1 -p 3306:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql1/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql1/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql1/logs/:/var/log/mysql -d mysql:5.7

安装mastermysql2

docker run --name mastermysql2 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname mastermysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql2/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql2/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql2/logs/:/var/log/mysql -d mysql:5.7

安装slavemysql1

docker run --name slavemysql1 -p 3308:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql1 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql3/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql3/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql3/logs/:/var/log/mysql -d mysql:5.7

安装slavemysql2

docker run --name slavemysql2 -p 3309:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ymq --hostname slavemysql2 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/mysql4/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/mysql4/data/:/var/lib/mysql -v /home/mysql/docker-data/mysql4/logs/:/var/log/mysql -d mysql:5.7

#显示正在运行的容器
docker ps
#显示所有容器(可以查看没启动成功的容器)
docker ps -a

重点来了-------------------------------------------------------------------------------------------------------------

在这里插入图片描述
编号 角色 IP地址与端口 机器名字
1 Master1 云服务器内网IP : 3306 mastermysql1
2 Slave1 云服务器内网IP : 3308 slavemysql1
3 Master2 云服务器内网IP : 3307 mastermysql2
4 Slave2 云服务器内网IP : 3309 slavemysql2

mastermysql1 授权的角色名字slave 密码为123123

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查看主机的状态
show master status;

在这里插入图片描述
mastermysql2 授权的角色名字slave2 密码为123123

GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'%' IDENTIFIED BY '123123';
#查看主机的状态
show master status;

在这里插入图片描述
两个主机创建完账号后,开始操作从机了------------------------------------------------------------------------
两台从机都进行同步操作
连接说明

#在从机上配置需要复制的主机 Slava1 复制 Master1
#因为我是单机演示所以,需要给MASTER_PORT指定端口访问
CHANGE MASTER TO MASTER_HOST='主机的IP地址,公网内网都行',
MASTER_PORT=相应的端口,
MASTER_USER='角色名称',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

Slave1 连接 Master1----------------------------------------------------

#我的ip为云服务器内网IP
#端口是mastermysql1容器映射在 主机的端口3306
#mastermysql1 授权的用户 slave 密码为123456
#mastermysql1 logbin复制文件mysql-bin.000001,复制点为443
CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
#授权成功后
      #开启slave
      start slave;
      #查看从服务器状态
      show slave status\G;
#如果失败可以
      #重置slave
      reset slave;
      #然后重新配置

在这里插入图片描述
Slave2 连接 Master2

CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3307,
MASTER_USER='slave2',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
 #开启slave
 start slave;
 #查看从服务器状态
 show slave status\G;

在这里插入图片描述

两个主机也需要设置成对方的从机

在master1 中设置

CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3307,
MASTER_USER='slave2',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=444;
#启动两台主服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;

在这里插入图片描述
在master2中设置

CHANGE MASTER TO MASTER_HOST='172.24.7.187',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=443;
#启动两台主服务器复制功能
start slave;
#查看从服务器状态
show slave status\G;

在这里插入图片描述
mysql双主双从集群测试
在这里插入图片描述
成功!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐