• 主从技术的一个基本流程图:

  • 如何实现主从复制的呢:

MySQL  Master(主节点)

1》当一个请求来时,首先由【mysqld】写入到我们的主【data】中

2》然后【mysqld】将所有的sql语句存储到【binlog】日志文件中

MySQL Slave(从节点)

1》首先将主节点中的【binlog】数据拷贝到从节点【relay binlog】中

2》再由【SQL Thread】 将sql语句从【relay binlog】中读取出来,存储到从节点的【data】库中

  • 实践一下

1》看一下主从节点的信息

mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog. | | No |
| binlog. | | No |
| binlog. | | No |
| binlog. | | No |
| binlog. | | No |
+---------------+-----------+-----------+

2》看一下主节点状态:

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog. | | | | |
+---------------+----------+--------------+------------------+-------------------+
row in set (0.08 sec)

3》看一下主节点详情操作:

mysql> show binlog events in 'binlog.000017';

结果如下(内容太多,所以没有截全):

4》我们随便找个表,然后新增个数据:

mysql> insert into user (name,age)values('杨老七',);

5》再次看一下主节点状态:

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog. | | | | |
+---------------+----------+--------------+------------------+-------------------+
row in set (0.08 sec)

此时可以看出【Position】的变化

6》有兴趣同学也可以看下主节点详情操作,也会多出很多行新增操作,由于内容太多,这里就不做展示了。

7》还有以下几个指令同学们了解一下:

#查看从节点操作详情
mysql> show relaylog events; #查看某一个从节点操作详情
mysql> show relaylog events in '【某从节点】'
  • 每一种集群架构都是一把双刃剑,有优点就有缺点,我们来瞅瞅主从模式有什么缺点:

1》可能出现脏读问题:当我们写入一条数据时,然后马上做查询,可能会查询不到

2》数据不一致:如果我们写入一条数据,然后突然网络断掉,到时slave和master数据不同步

解决方式:采用半同步的解决方式

    • 写入数据时,产生一个同步等待处理,然后写入binlog
    • 从节点relay binlog此时同步主节点binlog,当binlog同步结束后,通知主节点同步结束
    • 主节点得知从节点binlog同步后,再通知Server写入数据结束

如图:

为什么是半同步?

    • 因为数据只是同步到binlog,如果是全同步则需要同步至Slave数据库中,这样写入效率会提高一些

这样会出现一些缺点:

    • 写入会慢,网络不稳定,主库持续等待。

解决措施: 

    • 通知只设置一个节点(S1)进行半同步操作
    • 连不上S1的时候会自动转为异步
    • 设置10秒超时,超时10秒转为异步
    • S1网络,硬件要好,不提供服务,只能接管。

  • 最后有一句很关键的话送给大家:如果有一天不消息把数据库删掉了,只要binlog文件还在,我们就可以恢复数据库。所以删库跑路一定要把binlog文件也删掉 ^ _ ^

【MySQL】剖析MySQL读写分离技术的更多相关文章

  1. MySQL主从复制技术与读写分离技术amoeba应用

    MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...

  2. MySQL读写分离技术

    1.简介 当今MySQL使用相当广泛,随着用户的增多以及数据量的增大,高并发随之而来.然而我们有很多办法可以缓解数据库的压力.分布式数据库.负载均衡.读写分离.增加缓存服务器等等.这里我们将采用读写分 ...

  3. Django中MySQL读写分离技术

    最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...

  4. Mysql主从复制,读写分离

    一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...

  5. Mysql 主从复制,读写分离设置

    一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...

  6. mysql主从复制以及读写分离

    之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...

  7. 如何轻松实现MySQL数据库的读写分离和负载均衡?

    配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ...

  8. 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...

  9. 利用MySQL Router构建读写分离MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 部署MySQL Router 2. 启动mysqlrouter服务 3. 确认读写分离效果 4. 确认只读负载 ...

  10. Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程

    下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...

随机推荐

  1. 学习 .net core 3----蒋金楠 笔记 构建 Asp.net core Web应用

    前言:准备系统的学习一下.net core 所以购买了 蒋金楠的 ASP.NET CORE 3 书籍,为了加深印象 特此笔记,会持续更新到学习完为止 使用  命令行   dotnet  new  co ...

  2. Mozilla开始推送Firefox Preview 5.0版 支持画中画特性

    Mozilla 发布了 5.0 版本的 Firefox Preview 浏览器,根据 GitHub 上的发布说明,这次更新带来了一系列新的改进.其中包含对五个新的附加组件的支持,引入了对 Progre ...

  3. 记一次痛苦的Django报错调试经历:

    开发的程序在我的本地mac上,ubuntu上,以及树莓派上都成功实现了迁移和运行,但是当准备将运行好好地程序迁移到阿里云的服务器上的mysql数据库上时,出现了非常多的幺蛾子的问题. 具体如下: 初始 ...

  4. CSS开发技巧(二):表格合并边框后的单元格宽度计算

    前言: 分离边框模型和合并边框模型是表格的两种模型,它通过以下属性确定: border-collapse:separate(默认值) | collapse | inherit 当采用分离边框模型时,表 ...

  5. 解析.xml并保存结点信息至.txt中

    @ 思路 利用java开源库dom4j解析.xml: dom4j操作xml - 读取xml,生成一个document实例: SAXReader reader = new SAXReader(); Do ...

  6. ISA Introduction

    介绍一下X86.MIPS.ARM三种指令集: 1. X86指令集 X86指令集是典型的CISC(Complex Instruction Set Computer)指令集. X86指令集外部看起来是CI ...

  7. nnIPXougCC

    13:58:31           2020-03-14 发现一本书叫做<活法> 学习ing 2020-03-14 15:22:36 太快 ,练习了一会sql语句和打字 想看一会 憨豆特 ...

  8. Java 创建并应用PPT幻灯片母版

    幻灯片母版,可在幻灯片中预先存储设计模板信息,包括字形.占位符大小或位置.背景设计和配色方案等:对设定好的母版可应用于所有幻灯片,也可设计多个不同母版应用于不同幻灯片.下面通过Java代码示例介绍如何 ...

  9. 软件——Ubuntu16.04设置静态ip地址

    1.获取网卡名称 在命令行输入ifconfig -a 2.修改网卡配置文件 sudo vim /etc/network/interfaces 加上下面的配置,IP地址可以成适合你的 auto eth0 ...

  10. 王颖奇 20171010129《面向对象程序设计(java)》第十三周学习总结

      实验十三  图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基 ...