基于Docker的MySQL主从复制搭建及原理


基于Docker的MySQL主从复制搭建及原理

为什么基于Docker搭建?

  • 资源有限
  • 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐
  • 一台机器上可以运行多个Docker容器
  • Docker容器之间相互独立,有独立ip,互不冲突
  • Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:
docker pull mysql:5.7
然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Sl*e(从)

docker run -p 3340:3306 --name mysql-sl*e -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Master对外映射的端口是3339,Sl*e对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。
使用docker ps命令查看正在运行的容器:

7238b506-fc3d-4ff0-9842-e4964d7194bb.png

此时可以使用N*icat等工具测试连接mysql

Snipaste_2019-07-01_16-15-48.png

配置Master(主)

通过docker exec -it 5ddad8c2f368 /bin/bash命令进入到Master容器内部,也可以通过docker exec -it mysql-master /bin/bash命令进入。5ddad8c2f368是容器的id,而mysql-master是容器的名称。
cd /etc/mysql/mysql.conf.d切换到/etc/mysql/mysql.conf.d目录下,然后vim mysqld.cnf对my.cnf进行编辑。此时会报出bash: vim: command not found,需要我们在docker容器内部自行安装vim。使用apt-get install vim命令安装vim
会出现如下问题:

ea130dc1-9ac8-440f-957b-539bd30c6096.png

执行apt-get update,然后再次执行apt-get install vim即可成功安装vim。然后我们就可以使用vim编辑my.cnf,在my.cnf中添加如下配置:

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mysql-master启动容器。
下一步在Master数据库创建数据同步用户,授予用户 sl*e REPLICATION SL*E权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
首先连接mysql数据库
root@5ddad8c2f368:/# mysql -uroot -p123456
CREATE USER 'sl*e'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SL*E, REPLICATION CLIENT ON *.* TO 'sl*e'@'%';

授予复制账号REPLICATION CLIENT权限,复制用户可以使用SHOW MASTER STATUS, SHOW SL*E STATUS和 SHOW BINARY LOGS来确定复制状态。授予复制账号REPLICATION SL*E权限,复制才能真正地工作。

99d18c94-bb78-4a0e-addc-7f915d723b9d.png

配置Sl*e(从)

和配置Master(主)一样,在Sl*e配置文件my.cnf中添加如下配置:

[mysqld]  
## 设置server_id,注意要唯一  server-id=101 
## 开启二进制日志功能,以备Sl*e作为其它Sl*e的Master时使用  
log-bin=mysql-sl*e-bin 
## relay_log配置中继日志  
relay_log=edu-mysql-relay-bin

配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。

relay log很多方面都跟binary log差不多。区别是:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。

MyBB 国外最好的免费论坛 MyBB 国外最好的免费论坛

MyBB的全称是mybboard,是一个基于PHP+MySQL搭建,功能强大,高效的开源论坛系统。 MyBB 使用了标准的论坛结构和模式,所以您的用户可以在您的论坛获得良好的用户体验。用户可以通过用户控制面板来自定义他们访问论坛的方式或者自定义他们想看到的论坛的内容,他们还可以方便地发表和答复一个主题并且标记与他们有关的主题。论坛管理员和版主可以使用MyBB的内置编辑器和版主工具等功能,控制并维

MyBB 国外最好的免费论坛 95 查看详情 MyBB 国外最好的免费论坛

Snipaste_2019-07-01_16-17-12.png

链接Master(主)和Sl*e(从)

在Master进入mysql,执行show master status;
c296d6ec-129b-4d88-acb7-564dd58dc2e7.png

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
在Sl*e 中进入 mysql,执行

CHANGE MASTER TO master_host = '172.17.0.2',
master_user = 'sl*e',
master_password = '123456',
master_port = 3306,
master_log_file = 'mysql-bin.000001',
master_log_pos = 617,
master_connect_retry = 30;

命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

769620ff-5d7f-4b60-89a1-3d492e93964e.png

master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Sl*e 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Sl*e 中的mysql终端执行show sl*e status \G;用于查看主从同步状态。
Snipaste_2019-07-01_16-11-23.png

正常情况下,Sl*eIORunning 和 Sl*eSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start sl*e开启主从复制过程,然后再次查询主从同步状态show sl*e status \G;
Snipaste_2019-07-01_16-11-54.png

Sl*eIORunning 和 Sl*eSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
主从复制排错:
Snipaste_2019-07-01_16-13-15.png

使用start sl*e开启主从复制过程后,如果Sl*eIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

  • 网络不通
    检查ip,端口
  • 密码不对
    检查是否创建用于同步的用户和用户密码是否正确
  • pos不对
    检查Master的 Position

测试主从复制

测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Sl*e是否存在此数据库。
Master:
7697c5c4-f1ac-498a-89b6-945549a4d200.png

Sl*e:
1ddd9c9a-312b-425e-bd4c-d77789b7911d.png

完整的主备流程图

最后让我们来看一下,一个 update 语句在节点 A 执行,然后同步到节点 B的完整流程图。
Snipaste_2019-07-01_16-12-27.png

可以看到:主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写入binlog。
备库B跟主库A之间维持了一个长连接。主库A内部有一个线程,专门用于服务备库B的这个长连接。
一个事务日志同步的完整过程是这样的:

  • 1、在备库B上通过change master命令,设置主库A的IP、端口、用户名、密码、以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  • 2、在备库B上执行start sl*e命令,这时侯备库会启动两个线程,io_thread 和 sql_thread。其中, io_thread负责与主库建立连接。
  • 3、主库A校验完用户名、密码后,开始按照备库B传过来的位置,从本地读取binlog,发给B。
  • 4、备库B拿到binlog后,写到本地文件,称为中转日志(relay log)。
  • 5、sql_thread读取中转日志,解析日志里的命令,并执行。

以上就是基于Docker的MySQL主从复制搭建及原理的详细内容,更多请关注其它相关文章!


# 国外  # 广州企业营销网站建设  # seo优化诊断报告  # 石湾大沥网站建设  # 京山seo推广机构  # 蚌埠关键词排名软件优化  # 益阳营销推广企业有哪些  # 营销推广经理绩效评价  # 全国谷歌seo厂家  # CC图库网站建设  # SEO增发新股  # MySQL  # 您的  # 都是  # 免费论坛  # 可以使用  # 解锁  # 可以通过  # 重启  # 最好的  # 镜像 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《sketchbook》选中部分图案移动方法  小红书如何引流到私信?引流到私信有用吗?  如何通过settings.json个性化您的VS Code体验  解决异步Python机器人中同步操作的阻塞问题  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  iPhone14无法连接蓝牙设备如何解决  英雄联盟争者留名活动介绍  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  《360浏览器》自动保存账号密码设置方法  解决Pandas DataFrame高度碎片化警告:高效创建多列的策略  mail.qq.com登录入口 QQ邮箱网页版直达  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  圆通快递官网入口查询单号 手机版官方查询入口  Go语言中方法与接收器:指针和值类型的调用机制详解  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  windows10怎么开启卓越性能_windows10电源选项代码激活  Retrofit根路径POST请求:@POST("/") 的应用与解析  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  海棠阅读登录教程_详细讲解海棠登录操作  使用VS Code调试Python代码:从入门到精通  《随手记》启用语音备注方法  深入理解J*aScript异步操作:setTimeout与调用栈的真相  在PHP环境中正确加载HTML资源:CSS样式与图片路径指南  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  除了Copilot,还有哪些值得一试的VS Code AI插件?  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  Go语言反射机制:如何访问被嵌入结构体遮蔽的方法  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  mysql中如何配置字符集和排序规则_mysql字符集排序配置  Excel宏怎么删除_Excel中删除宏的详细操作流程  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  易车网官网直达入口 易车网在线登录入口  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  网页版网易云音乐入口_网易云音乐在线官网登录  胃动力不足?试试这5个调理方法  yandex网页版直接登录 yandex官方入口平台访问方法  谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法  J*aScript桌面应用_Electron多进程架构实战  《梦想世界:长风问剑录》药师一图流分享  快递物流路径揭秘  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  LINUX怎么查看显卡信息_LINUX查看GPU状态  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  163邮箱登录入口官网 163.com邮箱登录入口 

 2019-07-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.