主库A执行完成一个事务, 写入binlog ,记为 T1
  
  然后传给从库B,从库B 接收该binlog ,记为 T2
  
  从库B执行完成这个事务,记为 T3
  
  同步延时: T3-T1
  
  同一个事务,在 从库执行完成的时间 和 主库执行完成的时间 之间的差值
  
  SHOW SLAVE STATUS 中的 Seconds_Behind_Master
  
  MySQL -- 主从复制的可靠性与可用性
  
  Seconds_Behind_Master
  
  计算方法
  
  每个事务的 binlog 里面都有一个 时间字段 ,用于记录该 binlog 在 主库 上的写入时间
  
  从库取出当前正在执行的事务的时间字段的值,计算它与当前系统时间点差值,得到 Seconds_Behind_Master
  
  即 T3-T1
  
  如果主库与从库的时间不一致, Seconds_Behind_Master 会不会有误差?
  
  一般不会
  
  在 从库连接到主库 时,会通过 SELECT UNIX_TIMESTAMP() 获取 当前主库的系统时间
  
  如果 从库 发现 当前主库的系统时间 与自己的不一致,在计算 Seconds_Behind_Master 会 自动扣除 这部分差值
  
  但建立连接后,主库或从库又修改了系统时间,依然会不准确
  
  在 网络正常 的情况下, T2-T1 通常会非常小,此时同步延时的主要来源是 T3-T2
  
  从库消费 relaylog 的速度跟不上主库生成 binlog 的速度
  
  延时来源
  
  从库所在 机器的性能 要弱于主库所在的机器
  
  更新请求对于IPOS的压力 ,在 主库 和 从库 上是 无差别 的
  
  非对称部署 :20个主库放在4个机器上,但所有从库放在一个机器上
  
  主从之间可能会 随时切换 ,现在一般都会采用 相同规格的机器 + 对称部署
  
  从库压力大
  
  常见场景:管理后台的查询语句
  
  从库上的查询耗费大量的 CPU资源 和 IO资源 ,影响了同步速度,造成了 同步延时
  
  解决方案
  
  一主多从 ,分担读压力,一般都会采用
  
  通过 binlog 输出到 外部系统 ,例如Hadoop
  
  大事务
  
  主库上必须等待 事务执行完成 后才会写入 binlog ,再传给从库
  
  常见场景1: 一次性删除太多数据 (如归档的历史数据)
  
  解决方案:控制每个事务删除的数据量,分多次删除
  
  常见场景2: 大表DDL
  
  解决方案: gh-ost
  
  从库的 并行复制能力 (后续展开)
  
  切换策略
  
  可靠性优先
  
  切换过程一般由专门的 HA 系统完成,存在 不可用时间 (主库A和从库B都处于 只读 状态)
  
  MySQL -- 主从复制的可靠性与可用性
  
  判断 从库B 的 Seconds_Behind_Master 值,当 小于 某个值(例如5)才继续下一步
  
  把 主库A 改为 只读 状态( readonly=true )
  
  等待 从库B 的 Seconds_Behind_Master 值降为 0
  
  把 从库B 改为 可读写 状态( readonly=false )
  
  ROM microsoft/dotnet:2.1-sdk AS build
2 WORKDIR /app
3
4 # copy csproj and restore as distinct layers
5 COPY *.sln .
6 COPY WebApp-HelloWorld/*.csproj ./WebApp-HelloWorld/
7 RUN dotnet restore
8
9 # copy everything else and build app
10 COPY WebApp-HelloWorld/ www.zhongyiyuL.cn. ./WebApp-HelloWorld/
11 WORKDIR /app/WebApp-www.zhenghongyule.cn HelloWorld
12 RUN dotnet publish www.jiahuayulpt.com-c Release -o out
13
14
15 FROM microsoft/dotnet:www.myzx157.com 2.1-aspnetcore-runtime AS runtime
16 WORKDIR /app
17 COPY --from=build /app/WebApp-HelloWorld/out ./
18 ENTRYPOINT [www.mytxyl1.com"dotnet", "WebApp-HelloWorld.dll"www.yigouyule2.cn/]
  
  可用性优先
  
  不等主从同步完成, 直接把业务请求切换至从库B ,并且让 从库B可读写 ,这样几乎不存在不可用时间,但可能会 数据不一致
  
  表初始化
  
  CREATE TABLE `t` (
  
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  
  `c` INT(11) UNSIGNED DEFAULT NULL,
  
  PRIMARY KEY (`id`)
  
  ) ENGINE=InnoDB;
  
  INSERT INTO t (c) VALUES (1),(2),(3);
  
  插入数据
  
  INSERT INTO t (c) VALUES (4);
  
  -- 主库上的其它表有大量的更新,导致同步延时为5S,插入c=4后发起了主从切换
  
  INSERT INTO t (c) VALUES (5);
  
  MIXED
  
  MySQL -- 主从复制的可靠性与可用性
  
  主库A执行完 INSERT c=4 ,得到 (4,4) ,然后开始执行 主从切换
  
  主从之间有5S的同步延迟,从库B会先执行 INSERT c=5 ,得到 (4,5) ,并且会把这个 binlog 发给主库A
  
  从库B执行主库A传过来的 INSERT c=4 ,得到 (5,4)
  
  主库A执行从库B传过来的 INSERT c=5 ,得到 (5,5)
  
  此时主库A和从库B会有 两行 不一致的数据
  
  ROW
  
  MySQL -- 主从复制的可靠性与可用性
  
  采用 ROW 格式的 binlog 时,会记录新插入行的 所有字段的值 ,所以最后只会有 一行 数据不一致
  
  主库A和从库B的同步线程都会 报错并停止 : duplicate key error
  
  小结
  
  使用 ROW 格式的 binlog ,数据不一致的问题 更容易发现 ,采用 MIXED 或 STATEMENT 格式的 binlog ,数据可能悄悄地不一致
  
  主从切换采用 可用性优先 策略,可能会导致 数据不一致 ,大多数情况下,优先选择 可靠性优先 策略
  
  在满足 数据可靠性 的前提下,MySQL的 可用性 依赖于 同步延时 的大小( 同步延时越小 , 可用性越高 )

MySQL -- 主从复制的可靠性与可用性的更多相关文章

  1. 分布式数据存储-MySQL主从复制

    前言 一.主从复制过程 MySQL的主从复制能力是通过三个线程来实现的,两个在Slave端的I/O和SQL两个线程,还有一个在Master端I/O线程: Binlog dump thread:Mast ...

  2. mysql主从复制的一篇文章(转载)

      管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希 ...

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

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

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

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

  5. MySQL主从复制--原理

    简介 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一 ...

  6. MySQL入门篇(四)之MySQL主从复制

    一.MySQL主从复制原理 随机站点访问量的鞥集啊,单台的MySQL服务器压力也不断地增加,此时需要对MySQL进行优化,如果在MySQL优化无明显改善时期,可以使用高可用.主从复制.读写分离.分库分 ...

  7. mysql 主从复制以及binlog 测试

    ###mysql查看binlog日志内容 https://blog.csdn.net/nuli888/article/details/52106910 mysql的binlog日志位置可通过show ...

  8. MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理 ...

  9. 三、mysql主从复制

    1 MySQL 主从复制 1.1 主从复制的含义 在 MySQL 多服务器的架构中,至少要有一个主节点(master),跟主节点相对的,我们把它叫做从节点(slave). 主从复制,就是把主节点的数据 ...

随机推荐

  1. Linux系统扫描技术及安全防范

    1.概述 一.主机扫描 二.路由扫描 三.批量服务扫描 四.linux防范恶意扫描安全策略 一个典型的网络安全事件 ·案例:通过网络扫描方式获取某运营商核心设备管理权限 step01:通过tracer ...

  2. NYOJ 35 表达式求值

    一个模板了 哈哈. 这题由于已经包括了整形.浮点形了,以后也不须要特别处理了. /* 这里主要是逆波兰式的实现,使用两个stack 这里用字符串来模拟一个stack,第一步,将中缀表达式转变为后缀表达 ...

  3. 文理分科 BZOJ3894 & happiness BZOJ2127

    分析: 最小割(一开始我没看出来...后来经过提点,大致理解...),不选则割的思想. 我们先这样考虑,将和选理相关的和S相连,与选文相关的和T相连,如果没有第二问,那么建图就是简单的S连cnt,cn ...

  4. Scala _ 下划线

    1.引入包中的全部方法 import math._ //引入包中所有方法,与java中的*类似 2.表示集合元素 val a = (1 to 10).filter(_%2==0).map(_*2) / ...

  5. test_maven_实现表单验证

    这篇文章是我的上一篇文章的续集,如未看过,可看一下,上面的test_maven再继续看这个 这篇文章主要是阐述使用struts实现表单验证的功能. 1.首先了解actionContext:Action ...

  6. 1.6《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结

    本章节学过的重要命令整理,见下表Table 2. 命令 描述 例子 echo <string> 向屏幕输出字符串 $ echo hello man <command> 显示命令 ...

  7. China Cloud Computing Conference(2018.07.24)

    时间:2018.07.24地点:北京国家会议中心

  8. VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。

    原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...

  9. NetWork——描述一次完整的网络请求过程

    台根DNS,根DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP,本地DNS服务器使用该IP信息联系负责.net域的这台服务器.这台负责.net域的服务器收到请求后,如果自己无法解 ...

  10. Centos7下不删除python2.x的情况下安装python3.x

    Linux下默认系统自带python2.X的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装py ...