【MySQL】剖析MySQL读写分离技术
- 主从技术的一个基本流程图:

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

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读写分离技术的更多相关文章
- MySQL主从复制技术与读写分离技术amoeba应用
MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...
- MySQL读写分离技术
1.简介 当今MySQL使用相当广泛,随着用户的增多以及数据量的增大,高并发随之而来.然而我们有很多办法可以缓解数据库的压力.分布式数据库.负载均衡.读写分离.增加缓存服务器等等.这里我们将采用读写分 ...
- Django中MySQL读写分离技术
最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...
- Mysql主从复制,读写分离
一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...
- Mysql 主从复制,读写分离设置
一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...
- mysql主从复制以及读写分离
之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...
- 如何轻松实现MySQL数据库的读写分离和负载均衡?
配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ...
- 聊聊Mysql主从同步读写分离配置实现
Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享.最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分 ...
- 利用MySQL Router构建读写分离MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 部署MySQL Router 2. 启动mysqlrouter服务 3. 确认读写分离效果 4. 确认只读负载 ...
- Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程
下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...
随机推荐
- while循环脚本
[root@oldboy ~]# (while :;do date;sleep 5;done)& fg ctrl c退出 fg ( while :; do date; sleep 5; don ...
- VS2013 配置全局 VC++目录
原文链接:https://blog.csdn.net/humanking7/article/details/80391914 也许是我VS2013安装的有问题,每次编译程序都要去 项目属性页-> ...
- Axure遮罩 or 灯箱
2019独角兽企业重金招聘Python工程师标准>>> 在做原型设计的时候,常常需要设计弹窗(比如confirm.alert或者弹出面板),加一个全屏的遮罩可以突出要展示的内容,效果 ...
- centos8-django项目部署 nginx+uwsgi
1.虚拟环境virtualenv安装 1.安装virtualenv pip3 install virtualenv 2.创建目录,把项目文件传过来 mkdir My cd My 3.创建独立运行环境- ...
- C. Okabe and Boxes 思维 模拟 or 线段树
C. Okabe and Boxes 这个题目是一个有点思维的模拟,当时没有想到, 思维就是这个栈的排序这里,因为每次直接排序肯定会t的,所以不可以这么写,那怎么表示排序呢? 就是直接把栈清空,如果栈 ...
- 关于使用ffmpeg的一些牢骚
一.啰嗦几句 好几年不写博客了,一是工作计算机都加密了没法编辑提交:二是各种语言混用,什么都会就是什么都不会,delphi.c#.vb.python.c++要说我精通啥,啥也不精,所以不敢乱写. 最近 ...
- Java模拟UDP通信
目录 Java基础:模拟UDP通信 1.一次发送,一次接收 1.1.发送方 1.2.接收方 2.多次发送,多次接收 2.1.发送方 2.2.接收方 3.模拟双方通信 3.1.发送方的线程 3.2.接收 ...
- 【Hadoop离线基础总结】HDFS详细介绍
HDFS详细介绍 分布式文件系统设计思路 概述 只有一台机器时的文件查找:hello.txt /export/servers/hello.txt 如果有多台机器时的文件查找:hello.txt nod ...
- X Error:BadDrawable (individ Pixmap or Window parameter 9)
#描述 平台:aarch64 系统:ubuntu16.04.02 Qt Version:4.8.7 Qt程序可以正常运行,界面渲染出现问题以及乱码,控制提示错误内容: "unable to ...
- spring-boot如何去获取前端传递的参数
本文主要讨论spring-boot如何获取前端传过来的参数,这些参数主要有两大类,一类是URL里的参数,一个是请求body里的参数 url里的参数 通过url里传过来的参数一般有三种方式,下面我们来看 ...