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

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

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. VulnHub靶场学习_HA: Chanakya

    HA-Chanakya Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-chanakya,395/ 背景: 摧毁王国的策划者又回来了,这次他创造了一个难 ...

  2. hdu_1052 Tian Ji -- The Horse Racing 贪心

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. Java阻塞队列四组API介绍

    Java阻塞队列四组API介绍 通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及常用的七个阻塞队列.如下图: 本文来源:凯哥Java(kaigejava)讲解Java ...

  4. 记django从1.11.7升级到2.0.1

    第一步:升级django之后记录下django等其他相关依赖包的版本号. 在terminal中输入 pip freeze, 获取所有包的版本号.为了在升级不成功后可以回到低版本. 第二步:卸载再重装d ...

  5. mycat入门部署安装

    mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库. 硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:1.6..6.1 github上下载m ...

  6. React-Native iOS真机调试(新版)

    2019独角兽企业重金招聘Python工程师标准>>> React-Native iOS真机调试 看到网上很多以前的文章 找到两种方法 一 修改AppDelegate 把URL的替换 ...

  7. Spring源码学习——自定义标签

    2019独角兽企业重金招聘Python工程师标准>>> 1.自定义标签步骤 创建一个需要扩展的组件 定义xsd文件描述组件内容 创建一个文件,实现BeanDefinitionPars ...

  8. Java 类类型之 String 类型

    类类型 引用数据类型存的都是地址,通过地址指向对象: 基本数据类型存的都是具体值: 字符串 (String) 类型 特点: 1.字符创都是对象: 2.一旦初始化,不能被更改,字符串缓冲区支持可变的字符 ...

  9. 课堂管理系统;在线教辅平台;java课设

    # 白泽智慧教辅平台 **说明:** 运行时需要修改位置: bzedu\src\main\resources\application.properties bzedu\src\main\resourc ...

  10. Keepalived搭建LVS高可用性集群系统

    ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover ...