Docker搭建Mysql5.7双主双从集群步骤

记录下在Docker搭建mysql5.7双主双从集群步骤

1.拉取镜像

docker pull mysql:5.7

2.创建对应数据卷

由于我们需要做数据持久化,所以先在本地创建对应四个节点的相应文件夹

#conf文件夹用于存放配置文件
mkdir -p /root/mysql/mysql-master/conf
#data文件夹用于存放mysql数据文件
mkdir -p /root/mysql/mysql-master/data
#log文件夹用于存放mysql日志文件
mkdir -p /root/mysql/mysql-master/log

mkdir -p /root/mysql/mysql-master1/conf
mkdir -p /root/mysql/mysql-master1/data
mkdir -p /root/mysql/mysql-master1/log

mkdir -p /root/mysql/mysql-slave/conf
mkdir -p /root/mysql/mysql-slave/data
mkdir -p /root/mysql/mysql-slave/log

mkdir -p /root/mysql/mysql-slave1/conf
mkdir -p /root/mysql/mysql-slave1/data
mkdir -p /root/mysql/mysql-slave1/log

3.手动配置Mysql配置文件my.cnf

在/root/mysql/mysql-master/conf下新建主节点1的my.cnf文件

cd /root/mysql/mysql-master/conf
vi my.cnf

新增如下内容

[client]
default_character_set=utf8  #设置字符集为Utf-8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=01  #当前服务的ID,集群中ID不能相同
binlog-ignore-db=mysql   #设置Mysql库不进行主从复制
log-bin=master-log-bin   #开启二进制日志,设置日志文件名称
binlog_cache_size=1M   #设置binlog缓存大小为1M
binlog_format=mixed #设置同步模式为混合
expire_logs_days=7 #设置二进制日志过期清理时间为7天
slave_skip_errors=1062 #设置在主从复制时跳过此类报错

在/root/mysql/mysql-master1/conf下新建主节点2的my.cnf文件

cd /root/mysql/mysql-master1/conf
vi my.cnf

新增如下内容

[client]
default_character_set=utf8  
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=02
binlog-ignore-db=mysql   
log-bin=master1-log-bin   
binlog_cache_size=1M   
binlog_format=mixed
expire_logs_days=7 
slave_skip_errors=1062 

在/root/mysql/mysql-slave/conf下新建从节点1的my.cnf文件

cd /root/mysql/mysql-slave/conf
vi my.cnf

新增如下内容

[client]
default_character_set=utf8  #设置字符集为Utf-8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=03
binlog-ignore-db=mysql
log-bin=slave-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay-log-bin
log_slave_updates=1 #log_slave_updates表示slave将复制时间写进自己的二进制日志
read_only=1

在/root/mysql/mysql-slave1/conf下新建从节点2的my.cnf文件

cd /root/mysql/mysql-slave1/conf
vi my.cnf

新增如下内容

[client]
default_character_set=utf8  #设置字符集为Utf-8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=04
binlog-ignore-db=mysql
log-bin=slave1-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay1-log-bin
log_slave_updates=1 #log_slave_updates表示slave将复制时间写进自己的二进制日志
read_only=1

4.开启对应的4个节点的服务

主节点1

docker run --name mysqlm \
-e MYSQL_ROOT_PASSWORD=root \
-v /root/mysql_master/data:/var/lib/mysql \
-v /root/mysql_master/log:/var/log/mysql \
-v /root/mysql_master/conf:/etc/mysql/conf.d \
-dp 3306:3306 mysql:5.7

主节点2

docker run --name mysqlm1 \
-e MYSQL_ROOT_PASSWORD=root \
-v /root/mysql_master1/data:/var/lib/mysql \
-v /root/mysql_master1/log:/var/log/mysql \
-v /root/mysql_master1/conf:/etc/mysql/conf.d \
-dp 3307:3306 mysql:5.7

从节点1

docker run --name mysqls \
-e MYSQL_ROOT_PASSWORD=root \
-v /root/mysql_slave/data:/var/lib/mysql \
-v /root/mysql_slave/log:/var/log/mysql \
-v /root/mysql_slave/conf:/etc/mysql/conf.d \
-dp 3308:3306 mysql:5.7

从节点2

docker run --name mysqls1 \
-e MYSQL_ROOT_PASSWORD=root \
-v /root/mysql_slave1/data:/var/lib/mysql \
-v /root/mysql_slave1/log:/var/log/mysql \
-v /root/mysql_slave1/conf:/etc/mysql/conf.d \
-dp 3309:3306 mysql:5.7

启动成功后docker ps -a 查看进程是否启动
在这里插入图片描述如上4个节点的mysql服务全部启动成功

5.配置主从关系

(1)配置slave为master节点的从节点

在master中配置slave用户给从节点使用

docker exec -it mysqlm /bin/bash
---
mysql -uroot -proot

登录Mysql后执行
create user 'slave'@'%' identified by 'root';
grant replication slave,replication client on *.* to 'slave'@'%';

然后查看主节点1 的日志文件名称和偏移量用于后面从节点配置使用
show master status;

在这里插入图片描述

在slave中配置开启主从复制

docker exec -it mysqls /bin/bash 
---
mysql -uroot -proot
#登录mysql后执行
change master to master_host='120.46.95.3',master_user='slave',master_password='root',master_port=3306,master_log_file='master-log-bin.000004',master_log_pos=770,master_connect_retry=30,master_retry_count=3;

#开启主从复制
start slave;

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

在这里插入图片描述
查看状态出现如上内容则说明配置成功。

(2)配置master1为master的从节点
docker exec -it mysqlm1 /bin/bash 
---
mysql -uroot -proot
#登录mysql后执行
change master to master_host='120.46.95.3',master_user='slave',master_password='root',master_port=3306,master_log_file='master-log-bin.000004',master_log_pos=770,master_connect_retry=30,master_retry_count=3;

#开启主从复制
start slave;

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

在这里插入图片描述
当出现如上内容时master1已配置成为master的从节点。

下面在master1中设置slave用户用于master作为从节点进行连接

create user 'slave'@'%' identified by 'root';
grant replication slave,replication client on *.* to 'slave'@'%';

然后查看主节点2 的日志文件名称和偏移量用于后面从节点配置使用
show master status;

在这里插入图片描述

(3)配置master为master1的从节点
docker exec -it mysqlm /bin/bash 
---
mysql -uroot -proot
#登录mysql后执行
change master to master_host='120.46.95.3',master_user='slave',master_password='root',master_port=3307,master_log_file='master1-log-bin.000002',master_log_pos=768,master_connect_retry=30,master_retry_count=3;

#开启主从复制
start slave;

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

在这里插入图片描述
出现如上配置说明master已配置为master1的从节点。

(4)配置salve1为master1的从节点
docker exec -it mysqls1 /bin/bash 
---
mysql -uroot -proot
#登录mysql后执行
change master to master_host='120.46.95.3',master_user='slave',master_password='root',master_port=3307,master_log_file='master1-log-bin.000002',master_log_pos=768,master_connect_retry=30,master_retry_count=3;

#开启主从复制
start slave;

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

在这里插入图片描述
至此主从集群的配置均已完成并开启了主从复制。

6.验证

使用navicat工具分别连接4个节点
在这里插入图片描述

在主节点1创建新数据库ms,可以看到四个节点全部完成了数据同步
在这里插入图片描述

相关推荐

  1. RocketMQ

    2024-01-27 08:24:02       34 阅读
  2. dockerredis

    2024-01-27 08:24:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 08:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 08:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 08:24:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 08:24:02       20 阅读

热门阅读

  1. Redis的SDS你了解吗?

    2024-01-27 08:24:02       31 阅读
  2. GBASE南大通用分享-mysql初始化命令

    2024-01-27 08:24:02       36 阅读
  3. flutter 处理文字溢出并自动缩小的问题

    2024-01-27 08:24:02       36 阅读
  4. Flutter 如何设置状态栏

    2024-01-27 08:24:02       33 阅读
  5. git checkout和git switch的区别

    2024-01-27 08:24:02       29 阅读
  6. 华为云OBS-文件上传

    2024-01-27 08:24:02       36 阅读
  7. react的高阶函数HOC:

    2024-01-27 08:24:02       32 阅读
  8. flink-cdc实战之oracle问题记录01

    2024-01-27 08:24:02       42 阅读
  9. 需求分析师岗位的基本职责文本(合集)

    2024-01-27 08:24:02       25 阅读
  10. B3847 [GESP样题 一级] 当天的第几秒 题解

    2024-01-27 08:24:02       29 阅读
  11. Go 通过 goroutines 实现类似线程池的模式

    2024-01-27 08:24:02       29 阅读
  12. css flex布局详解

    2024-01-27 08:24:02       34 阅读