Docker Mysql8搭建主从复制架构

一:概述

在Docker环境下部署Mysql8 一个主库多个从库,实现主从复制。

二:详细操作

创建mysql容器,不知道如何创建的可以查看[该播客]

docker run -d -i --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql
docker run -d -i --name mysqlslave -e MYSQL_ROOT_PASSWORD=password -p 3307:3306 mysql
docker run -d -i --name mysqlslave2 -e MYSQL_ROOT_PASSWORD=password -p 3308:3306 mysql

使用Navicate测试是否成功

在这里插入图片描述

配置Master数据库

docker exec -it mysql bash
vim /etc/mysql/my.cnf
#如果vim不能使用执行下面命令
apt-get update   apt-get install vim

##在my.cnf中添加如下配置
[mysqld]

server-id=100 ## 同一局域网内要唯一
log-bin=master-bin ##二进制文件名称 【mysql8默认开启binlong】
binlog-format=ROW ##二进制日志格式 row,statement,mixed

重启master数据库

docker restart mysql

配置Slave数据库

docker exec -it mysqlslave bash
vim /etc/mysql/my.cnf

[mysqld]
server-id=101  
log-bin=mysql-slave-bin   
## 配置中继日志
relay_log=mysql-relay-bin  
read_only=1  ## 设置为只读

重启slave数据库

docker restart mysqlslave

配置slave2数据库和slave配置一样

docker exec -it mysqlslave2 bash
vim /etc/mysql/my.cnf

[mysqld]
server-id=102  
log-bin=mysql-slave-bin   
## 配置中继日志
relay_log=mysql-relay-bin  
read_only=1  ## 设置为只读

进入master数据库开启主从复制

docker exec -it mysql bash
mysql -uroot -p
show master status ##记住File和Position

查看master在docker容器中的通信地址

在cmd中执行 记住IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

在这里插入图片描述

进入Slave客户端

docker exec -it mysqlslave bash
mysql -uroot -p
change master to master_host='172.17.0.3', master_user='root', master_password='password', master_port=3306, master_log_file='master-bin.000001', master_log_pos=339, master_connect_retry=30;

开启Slave

start slave;

查看是否开启成功

show slave status;
##保证下面两个Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

在这里插入图片描述

使用Navicat进行测试

在这里插入图片描述

三:涉及知识

二进制日志的三种格式详解

Statement
每一条修改数据的sql都会记录到master的bin_log中,slave在复制的时候sql进程会解析成master端执行过的相同的sql在slave库上再次执行,只记录sql语句执行的细节不需要记录每一行变化的细节。 

Row
日志中会记录成每一行数据修改的形式以及数据的变化,然后在slave端再对相同的数据进行修改。

Mixed模式(混合模式)
实际上就是前两种模式的结合,在mixed模式下,mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也是在statement和row之间选择一种。

Slave_IO_Running: Yes
Slave的IO进程:用来读取Master数据库的binlog日志,然后写入Slave本地的中继日志。

Slave_SQL_Running: Yes 
Slave的处理进程:将中继日志数据分析成sql一行一行的执行,同步主库的数据

主从复制是单进程的所以主从数据会存在延时,后期会出一篇文章单独讲解原理
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞎玩儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值