MySQL在生成环境中,如果是单机版的部署方式,就会有很大的可用性问题,MySQL提供了一套主从复制的架构,以提高其可用性。

MySQL主从复制架构,就是部署两台机器,一台机器上部署的MySQL是master节点,另一台机器上部署的MySQL是slave节点。

我们平时可以向master节点读写数据,master节点会把写入的数据自动复制到slave节点去,让slave节点与master节点有一份一样的数据。

图1 MySQL主从复制架构

MySQL的主从复制架构,有一个大名鼎鼎的作用,就是读写分离

读写分离就是,你的Java业务系统可以向master节点写入数据,但是从slave节点读取数据,读和写分别在不同的机器上。

图2 MySQL读写分离

读写分离的作用是显而易见的,假设MySQL单机每秒抗4000读写请求,1500的写请求 + 2500的读请求,压力已经到极限了,此时你可以利用读写分离架构,让2500的读请求分流到到slave节点,就会大大降低master节点的压力。

如果随着业务发展,读请求越来越多,一个salve节点也快扛不住读请求了,你可以再部署几个从节点,MySQL主从架构是支持一主多从的。让多个从节点分摊读请求。

图3 MySQL主从复制一主多从

MySQL主从复制的工作原理

MySQL在执行增删改的时候,会记录binlog日志,从库上会起一个IO线程,这个线程会跟master节点建立一个TCP连接,请求master节点传送binlog日志给自己,这个时候master上有一个IO dump线程,会负责通过这个TCP连接,把binlog日志传输给slave的IO线程。

然后,slave节点的IO线程会把读取到的binlog日志写入到自己本地的relay日志文件里去,然后从库上另外一个线程会读取relay里的日志,进行日志重做,把所有在master上执行的增删改操作在slave上也执行一遍。

图3 MySQL主从复制原理

简单来说,你只要给master挂上一个slave节点,slave节点的IO线程就会跟master节点建立网络连接,然后请求master节点传输binlog日志,master节点的IO dump线程就负责传输binlog日志给从节点,从节点收到日志后就可以回放增删改操作恢复数据了。

canal就是把自己伪装成slave,利用同样的同步机制,把master节点binlog同步过去的。

通常master节点复制数据到slave节点,有几种方式。

(1)异步复制

master把日志写入binlog,就提交事务返回了,它不管slave有没有收到日志。

如果此时数据还没同步到salve,master宕机了,数据是不是就丢了?

因此你可以采用半同步的复制方式。

(2)半同步复制方式

半同步就是说,你master写入数据,日志进入binlog之后,会确保 binlog日志复制到slave了,再告诉客户端说本次写入事务成本了。

这样就算master宕机了,你写入binlog的数据也到了slave,数据也不会丢失。

一般生产环境中,会采用半同步复制的方式。

主从复制延迟问题如何解决?

master是多线程并发写入的,所以主库写入数据的速度可能是很快的,但是slave是单个线程缓慢拉取数据的,所以必定会导致slave节点数据比master节点慢。

这导致的问题也很明显,你向master节点写入一条数据,立马去slave节点读取,可能就读不到。

怎么解决?

MySQL 5.7就已经支持并行复制了,可以在slave节点里设置slave_parallel_workers>0,就是开启多个线程去同步binlog,然后把slave_parallel_type设置为LOGICAL_CLOCK,就好了。

即使是这样,也还是有可能主从不一致。

如果你要求主从数据强一致,那么你只能强制从master库里去读,这样就肯定不会出现主从不一致的问题了。

一文讲清,MySQL主从架构相关推荐

  1. MySQL 主从架构配置详解

    原文http://www.codeceo.com/article/mysql-master-slave.html 无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为 ...

  2. 使用Innobackupex快速搭建(修复)MySQL主从架构

    2019独角兽企业重金招聘Python工程师标准>>> 使用Innobackupex快速搭建(修复)MySQL主从架构 MySQL的主从搭建大家有很多种方式,传统的mysqldump ...

  3. P,NP,PSPACE都是什么,一文讲清计算复杂性分类

    P,NP,PSPACE都是什么鬼一文讲清计算复杂性分类 7种计算复杂类的关系 导语 对于计算机来说,哪些问题是容易计算的,哪些是几乎不可能的?这些是计算复杂性领域的核心问题.本文是对这些问题的鸟瞰.( ...

  4. linux mysql主从半同步_centos下安装mysql主从架构(半同步/多实例)

    centos下安装mysql主从架构(半同步/多实例) [toc] 简介 本教程会进行mysql一机多实例的安装.mysql主从同步配置.半同步配置 环境 OS: CentOS Linux relea ...

  5. 一文讲清-NFT市场新秀SudoSwap的AMM机制-创新挑战与局限

    NFT交易市场的近期颓势频现,整个市场的流动性大幅降低,而此时8月异军突起的SudoSwap则凭借一超多强的增长数据,让基于AMM机制的交易市场映入大众视野. 基于链上数据分析截至8.20日,已有上千 ...

  6. MySQL 主从架构原理

    MySQL 主从架构原理 一. 主从架构基本原理 上图展示的是 MySQL 的主从切换流程.在 State-1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步 ...

  7. 一文讲清土地财政,地方债,转移支付,房产税和中特估

    今天主要从地方政府的债务出发,谈一谈央地博弈,土地财政,转移支付以及房产税等内容. 本文干货较多,刚开始读起来会比较晦涩,但是干货满满,看懂了一定会有收获 具体: ​​​​​​一文讲清土地财政,地方债 ...

  8. MySQL主从架构、读写分离、集群相关面试问题

    文章目录 一.MySQL主从同步原理 二.MySQL主从集群面试相关问题 1.全库同步与部分同步 2.GTID同步集群 3.集群扩容与MySQL数据迁移 4.理解半同步复制 5.主从集群与读写分离 6 ...

  9. 高性能Mysql主从架构的复制原理及配置详解

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

最新文章

  1. 卓瑞机器人_校企合作专业共建记涪陵职教中心机器人专业中泰学术交流活动
  2. 数组名与数组指针的关系
  3. NMS 非极大值抑制
  4. 查看mysql 默认端口号和修改端口号
  5. 北斗导航 | 北斗三号之RDSS短报文之双向零值
  6. 模拟inode号耗尽、EXT和XFS类型文件恢复(详细图解)
  7. 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(二)
  8. 构建器设计模式_创新设计模式:构建器模式
  9. docker安装并运行ElasticSearch-Head插件
  10. java 如何查看jdk版本位数
  11. debian 11安装微信
  12. html阅读器 怎么卸载,internetexplorer怎么卸载
  13. php 输入表格数据,怎样将导出数据输入Excel 表格-php 怎么把数据导出到excel表格...
  14. kali利用MSF对ms17_010漏洞入侵win7
  15. 一个简单的安居客房屋信息爬虫
  16. 【伊利丹】Hadoop-2.5.0-CDH5.2.0 版本升级和数据均衡 实验记录
  17. 在岸人民币(CNY)和离岸人民币(CNH)
  18. css基础--弹性布局
  19. ubuntu 运行脚本发现 source: not found
  20. A WORDGAME: HANGMAN

热门文章

  1. RHEL7系统管理之内核管理
  2. 如何在电脑桌面添加计算机网络等,如何实现在电脑桌面上添加文字提醒
  3. 关于列表标签的一些使用(有序,无序,自定义列表)
  4. python生成word目录_Word&Python-创建目录
  5. arcgis自动完成面怎么用_硬派的自然断裂面石材怎么用才美?
  6. Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
  7. 0x13.基础数据结构 — 链表与邻接表
  8. C - A problem of sorting HDU - 5427 sort(cmp)
  9. 面试时怎么设计测试用例
  10. pytorch 模型可视化_高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力