mysql读写分离

读写分离:应用缓存的原则之一是保证缓存命中率足够高,在大量不同请求下的读多写少,“读写分离”是提升系统并发能力的重要手段。在完成主从复制之后,可以在写数据时只写主库,在读数据时只读从库
  • 主从复制原理:从库数量增加,从库连接上来的 I/O 线程也多,主库要创建同样多的 log dump 线程来处理复制的请求,对主库资源消耗比较高,一般一主两从一备主

    • 写入binlog:主库写 binlog (二进制)日志,提交事务,并更新本地存储数据。

      • MySQL 主库在收到客户端提交事务的请求之后,会先写入 binlog,再提交事务,更新存储引擎中的数据,事务提交完成后,返回给客户端“操作成功”的响应。
    • 同步 Binlog:异步把 binlog 复制到所有从库上,每个从库把 binlog 写到暂存日志中。

      • 从库会创建一个专门的 I/O 线程,连接主库的 log dump 线程,来接收主库的 binlog 日志,再把 binlog 信息写入 relay log 的中继日志里,再返回给主库“复制成功”的响应。
    • 回放 Binlog:回放 binlog,并更新存储数据。

      • 从库会创建一个用于回放 binlog 的线程,去读 relay log 中继日志,然后回放 binlog 更新存储引擎中的数据,最终实现主从的数据一致性。
  • binlog格式:Statement、Row 及 Mixed

    • Statement:binlog 会记录每一条修改数据的 SQL 操作,从库拿到后在本地进行回放
    • Row(默认):行为维度,记录每一行数据修改的细节,不记录执行 SQL 语句的上下文相关的信息,仅记录行数据的修改。类似redolog
    • Mixed:Statement 与 Row 的结合,在这种方式下,不同的 SQL 操作会区别对待,一般的数据操作使用 row 格式保存,有些表结构的变更语句,使用 statement 来记录
  • 其他主从复制模型

    • 同步复制:事务线程要等待所有从库的复制成功响应。
    • 异步复制:事务线程完全不等待从库的复制成功响应。数据一致性要求不高,当发生故障时,能容忍数据的丢失,甚至大量的丢失时用异步复制
    • 半同步复制5.5引入:事务线程不用等待所有的从库复制成功响应,存储引擎提交事务后只要一部分复制成功响应回来就行
    • 增强(无损)半同步复制5.7.2引入:主库在存储引擎提交事务前,必须先收到从库数据同步完成的确认信息后,才能提交事务,以此来解决幻读问题。Master 宕机了,由于最后一个事务还没有提交,所以本身这个数据对外也不可见,不存在丢失的问题。
    • 多源复制:N 个 Master 对应 1 个 Slave
    • 延迟复制:允许Slave 延迟回放接收到的二进制日志,为了避免主服务器上的误操作,马上又同步到了从服务器,导致数据完全丢失。金融行业来说,延迟复制必须考虑的架构部分
  • 解决主从延迟:主从延迟影响读取从库的实时性

    • 数据冗余:直接向读取方发送目标数据,不必发送id在读从库。数据太大会占带宽
    • 缓存解决:数据优先存缓存,读从库方优先读缓存
    • 直接查询主库:即使主从分离了少部分情况也可读主库,但慎读,数据太大会主库写请求锁行
    • 关键业务不进行读写分离:对一致性不敏感的业务不读写分离
    • 大事务拆分成小事务:大事务除了会导致提交速度变慢,还会导致主从复制延迟。
    • 主从复制延迟监控不能依赖 Seconds_Behind_Master 的值,最好的方法是额外配置一张心跳表;(太深入可不记)
    • 通过配置 MTS 并行复制机制,可以进一步缩短主从数据延迟的问题,推荐使用 MySQL 5.7版本,并配置成基于 WRITESET 的复制;(太深入可不记)
  • 实现主库和从库的数据库访问:1、配置数据源并在代码中判断发给指定数据源。2、使用中间件代理如mycat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)

一、概念 Compose 通过三个阶段把数据转化为UI:组合(要显示什么)、布局(要显示在哪里)、绘制(如何渲染)。 组合阶段 Compisition 界面首次渲染时会将可组合函数转化为一个个布局节点 Layout Nod…

回归预测模型:机器学习回归模型

1.支持向量机回归 (Support Vector Machine Regression, SVR) 支持向量机回归(SVR)是支持向量机(SVM)在回归问题上的应用。与SVM用于分类不同,SVR的目标是找到一个函数,这个函数在所有训练样本的误差都不超…

请解释Java中的Spring框架,包括核心模块和常用模块。

请解释Java中的Spring框架,包括核心模块和常用模块。 Spring框架是一个轻量级的开源Java框架,用于构建企业级应用程序。它提供了全面的基础设施支持,包括依赖注入(Dependency Injection)、面向切面编程(As…

0102awvs安装-扫描-信息收集

1 安装awvs23.7 解压压缩包,解压密码网站网址,下载地址在最后链接双击acunetix_23.7.230728157.exe安装程序 安装位置默认,如更改位置,后面需要更改bat文件相应内容 设置管理员信息 next直到浏览器跳出登录界面 2 运行运行www.dd…

SAP PP学习笔记 - 豆知识03 - SAP中的英文 - PP中英文,日语,中文

PP模块中的英文,日语,中文 对照。 生産計画 日本語英語中国語計画独立所要量planned independent requirement计划独立需求計画手配planned order计划订单資材所要量計画 (MRP)material requirements planning物料需求计划MRP エリアmrp areaMRP区MRP グ…

Linux命令-bunzip2命令(创一个bz2文件压缩包)

说明 bunzip2命令 解压缩由bzip2指令创建的”.bz2”压缩包。对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其…

第9章 网络编程

9.1 网络通信协议 通过计算机网络可以实现多台计算机连接,但是不同计算机的操作系统和硬件体系结构不同,为了提供通信支持,位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵…

Spring Resource

java.net.URL 类可用于访问带有各种URL前缀的资源,但是对于访问一些资源还是不够方便。比如不能从类路径或者相对于ServletContext来获取资源。而Spring 的Resource接口,则可以通过类路径等方式来访问资源。 1 Resource接口 图 Resource接口及方法 getI…

ATS2819 +HDMI_ARC音响项目需求

加我微信hezkz17,可申请加入数字音频系统研究开发交流答疑群,赠送音频项目核心开发资料 项目名称: ATS2819 +HDMI_ARC 设计要求 万科型号: E800A/B/C/D 项目依托: 结构设计: (草案) 2018/06/16

CCF编程能力等级认证GESP—C++2级—20231209

CCF编程能力等级认证GESP—C2级—20231209 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)小杨做题小杨的 H 字矩阵 参考答案单选题判断题编程题1编程题2 …

C++ STL->list模拟实现

theme: smartblue list list文档 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素…

【java语言基础⑦】面向对象——封装性、构造方法、this关键字、代码块、static关键字

封装性 什么是封装 在Java面向对象的思想中,封装是指一种将类的实现细节包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止本类的代码和数据被外部类定义的代码随机访问。 类的封装 类的封装是指将对象的状态信息隐藏在对象内部,不允…

bpmn-js 事件总线处理

bpmn-js中使用EventBus作为事件的处理句柄,EventBus的使用和我们常规使用的事件总线没啥大的区别,其源码位于:/diagram-js/lib/core/EventBus.js (bpmn-js使用diagram-js实现流程图的web端绘制呈现工具)。 EventBus使用…

代码随想录算法训练营第三二天 | 买卖股票、跳跃游戏

目录 买卖股票的最佳时机II跳跃游戏跳跃游戏ii LeetCode 122.买卖股票的最佳时机II LeetCode 55. 跳跃游戏 LeetCode 45.跳跃游戏II 买卖股票的最佳时机II 只有一只股票! 当前只有买股票或者卖股票的操作。 最终利润是可以分解的:把利润分解为每天为…

变分自编码器(VAE)PyTorch Lightning 实现

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

SAP PP学习笔记- 豆知识02 - 品目要谁来维护?怎么决定更不更新品目的数量金额?

其实都是在品目类型的Customize中设定的。 咱们这里简单试着说一下什么场景使用。 1,SAP中品目有很多View,都要由哪些部门来维护呢? 其实就是谁用谁维护呗。 在新建一个品目的时候,品目Type本身就决定了该品目要由哪些部门来维…

数据结构(4) 链表(链式存储)

链表(链式存储) 单链表定义基本操作的实现单链表的插入按位序插入指定节点的前插指定节点的后插 单链表的删除 小结 单链表 定义 顺序表优点:可随机存取,存储密度高,缺点:要求大片连续空间,改变容量不方便。 单链表优…

高数总结(4

目录 1.总结:小结: 1.总结: 小结: 关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解|| 由于本号流量还不足以发表推广,搜我的公众号即可:

【ASP.NET Core 基础知识】--最佳实践和进阶主题--性能调优和缓存

一、性能调优 在 ASP.NET Core 中进行性能调优,代码优化是至关重要的一部分。以下是一些常见的 ASP.NET Core 代码优化技巧: 减少数据库查询: 尽可能地减少数据库查询次数,可以通过使用合适的 ORM(对象关系映射&…

Codeforces Round 926 F. Sasha and the Wedding Binary Search Tree

F. Sasha and the Wedding Binary Search Tree 题意 给定一颗二叉搜索树,规定树上的所有点的点权都在范围 [ 1 , C ] [1, C] [1,C] 内,树上的某些节点点权已知,某些节点点权未知,求出合法的二叉搜索树的数量 思路 由于是二叉搜…