一文讲解MySQL主从复制|手撕MySQL|对线面试官

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 前言 作为 《手撕MySQL》 系列的第三篇文章,今天讲解使用bin log实现主从复制的功能。主从复制也是MySQL集群实现高可用、数据库读写分离的基石。
关注微信公众号【程序员白泽】,进入白泽的知识分享星球🌍

前言

作为 《手撕MySQL》 系列的第三篇文章,今天讲解使用bin log实现主从复制的功能。主从复制也是MySQL集群实现高可用、数据库读写分离的基石。因为是系列文章,上一篇文章中(传送门)我们已经介绍了在MySQL中查看bin log的相关状态以及文件信息,并且借助bin log(二进制日志)实现数据恢复的案例。因此在这篇文章中如有涉及相关知识,将不再赘述。

重申一下,数据恢复主从复制是bin log最重要的两个功能,也是面试的重点,一定要有所了解~

主从复制架构

一主一从/一主多从/级联

image-20220306182608427

这里给出了基础的两种主从复制的架构图,左侧由一个主库向三个从库同步对数据库的变更操作(上一篇文章中我们提到过bin log只会记录变更数据库的操作)。而右侧则在这个基础之上,将同步到数据的从库继续作为后一个从库的“主库”同步数据库变更操作,但是这些操主从复制模式的基本原理都是一样的。为了便于学习,本文后面讲解的demo将基于一主一从的最简单模式。

主从复制原理

image-20220306191346779

MySQL主从复制会有三个线程参与:

  • master端的log dump线程:

    当从结点连接到主结点之后,主节点会为每一个来自从结点的连接创建一个log dump线程与之通信,log dump线程负责读取master端的bin log数据文件 (多个log dump线程之间会互斥访问bin log文件——加锁) ,将其发送给对应slave端的接收线程。

  • slave端的I/O线程和SQL执行线程:

    slave端的两个线程中,I/O线程是负责连接主节点,并不断请求master端的新记录的bin log变更日志。I/O线程接收到log dump线程发送过来的bin log变更之后,将其保存在slave端本地的relay log文件中(异步缓冲),然后会由SQL线程读取relay log文件中的内容,并且转换成SQL用于在slave端执行,达到同步主库变更的效果 (在讲bin log数据恢复的时候,我们明白了数据恢复的本质就是再次执行一遍原先的SQL语句,而bin log中会记录数据库变更操作/行数据)

主从复制演示

下面我会用自己本地的MySQL数据库作为从库,而自己云服务器的MySQL作为主节点,通过主从复制,同步云数据库中的数据。并且在开始下面两个步骤之前要确保主库和从库的server-id不同。

  • 从库server-id设置为2,这个值可以通过修改mysql配置文件并重启的方式设置,也可以通过set global参数值的形式设置,具体可以Google~

image-20220306232631739

  • 主库server-id设置为1

image-20220306232834013

配置master节点

我的云数据库是通过Docker镜像部署的,如果你还不太清楚容器化技术,这里也可以阅读我写过的一篇Docker入门文章(传送门),下面会涉及一些docker操作命令,但如果只是为了了解主从复制的流程,继续看下去也没有任何问题 。

先通过docker ps查看正在运行的docker容器,找到MySQL容器对应的ID

image-20220306193556361

通过容器ID,进入MySQL的docker镜像(这里-it后面是你MySQL容器的)

image-20220306193416832

然后在MySQL容器内部登录MySQL

image-20220306193727515

首先确保master节点的bin log已经开启

image-20220306194214603

接下来在master节点上创建test_copy用户,设置密码为123456,并设置REPLICATION SLAVE权限(这个账号是给slave节点请求master节点用的)

image-20220306194416370

查看当前master节点的bin log数据文件的pos点(position点是位置的意思,可以简单理解成每执行一个数据库事务,就会从当前position开始执行,直到下一个position结束,下一次另一个事务就从前一个事务的结束position为起点开始记录,因此两个position之间就存储着一个事务的执行步骤,而数据恢复也好,主从复制也好,核心原理就是拿到两个pos点之间的数据文件转意成SQL事务,再执行一遍SQL事务)

image-20220306231135364

为了方便就直接用数据库管理工具建立一张copy表,设立id和username两个字段,插入3条数据,我们再来看一下现在bin log数据文件的pos点果然向后推了,表示对数据库的变更被记录到了bin log数据文件中。

image-20220306231306203

至此master节点的配置完成,创建好了给slave节点的用户,并且也准备了用于同步的数据。

image-20220306195845414

配置slave节点

现在我们用本地的MySQL数据库作为从结点,执行下面的命令,通过上面我们在主结点注册好的test_copy用户去获取主节点bin log中的变更数据。其中master_host是你的云数据库对应的服务器的IP地址:xx.xx.xx.xx。

image-20220306231545682

执行start slave命令,从结点开始同步主节点变更数据。

image-20220306232105690

最后在本地数据库(从数据库上查询得到copy数据库被成功同步下来!大功告成,如果遇到了问题,我再手撕MySQL系列第一篇文章就教大家在遇到MySQL启动相关问题时可以通过查询错误日志去看warning和error,找到原因),当然这只是一主一从进行数据同步的最简单的一个demo,还有通过全局事务ID代替pos点进行数据同步的方式,需要额外学习,本文就不多赘述。

image-20220306233011287

结束语

本文讲解了使用bin log进行主从复制的基本原理,结合上一篇文章的数据恢复,二进制日志的两大功能已经全部讲解完成,相信在面试中如果遇到相关的知识点可以对答如流。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
3天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
3月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
22天前
|
存储 SQL 关系型数据库
MySQL 面试题
MySQL 的一些基础面试题
|
2月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
103 14
|
2月前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
125 24
|
3月前
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
|
3月前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
3月前
|
SQL 关系型数据库 MySQL
美团面试:Mysql如何选择最优 执行计划,为什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴面试美团时遇到了关于MySQL执行计划的面试题:“MySQL如何选择最优执行计划,为什么?”由于缺乏系统化的准备,小伙伴未能给出满意的答案,面试失败。为此,尼恩为大家系统化地梳理了MySQL执行计划的相关知识,帮助大家提升技术水平,展示“技术肌肉”,让面试官“爱到不能自已”。相关内容已收录进《尼恩Java面试宝典PDF》V175版本,供大家参考学习。
|
4月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
150 0
Mysql中搭建主从复制原理和配置

热门文章

最新文章