zoukankan      html  css  js  c++  java
  • 【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.000013 |      4291 | No        |
    | binlog.000014 |       155 | No        |
    | binlog.000015 |       155 | No        |
    | binlog.000016 |      2504 | No        |
    | binlog.000017 |      2413 | No        |
    +---------------+-----------+-----------+

    2》看一下主节点状态:

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

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

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

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

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

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

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

    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000017 |     3003 |              |                  |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 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文件也删掉 ^ _ ^
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/boluopabo/p/12887441.html
Copyright © 2011-2022 走看看