栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker Mysql8搭建主从复制架构

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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一行一行的执行,同步主库的数据

主从复制是单进程的所以主从数据会存在延时,后期会出一篇文章单独讲解原理
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号