目录

  • 备库为什么要设置为只读模式?
  • 备库设置为只读,如何与主库保持同步更新?
  • A到B的内部流程如何?
  • binlog内容是什么?
  • `row`格式对于恢复数据有何好处
  • M-M结构的循环复制问题以及解决方案

备库为什么要设置为只读模式?

有这样几点考虑:

1、有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作

2、防止切换逻辑有bug,比如切换过程中出现双写( 同时写两个库(A、B )),造成主备不一致

3、可以用 readonly 状态,来判断节点的角色

备库设置为只读,如何与主库保持同步更新?

readonly的设置对于super权限用户是无效的。用于同步的线程,就拥有super权限。

A到B的内部流程如何?

主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写binlog;

备库B与主库A之间维持一个长连接。主库内部有一个线程,专门用于服务备库B这个长连接。

一个事务日志同步的完整过程:

1、备库B通过change master命令,设置主库A的IP、端口、用户名、密码,以及请求binlog的起始位置(文件名+日志偏移量)

2、备库B执行start slave命令,备库启动两个线程io_threadsql_threadio_thread负责与主库建立连接

3、主库A校验完用户名、密码后,按照备库B传过来的起始位置,读取本地的binlog然后发给备库B

4、备库B拿到binlog后,写到本地文件,称为中转日志(relay log)

5、sql_thread读取中转日志relay log ,解析日志里的命令,并执行

binlog内容是什么?

在解释内容之前,需要知道binlog的格式。

binlog有三种格式:statementrowmixed

statement

binlog_format=statement 时,binlog 里面记录的就是 SQL 语句的原文

statement格式的binlog的缺陷有个缺陷:

主备使用的索引可能是不一致的,最终导致执行删除时删除的数据不一致。

**row **

row 格式的 binlog 里没有了 SQL 语句的原文,而是替换成了两个 event: Table_mapDelete_rows.

1、 Table_map , 用于说明操作的表是test库的表t

2、Delete_rows , 用于定义删除的行为

binlog_format = row,binlog里面记录了真实删除行的主键id,这样binlog传到备库去的时候,肯定不会出现主备删除不同行的问题

mixed

mixed格式用于哪些场景呢?

statement格式可能会导致主备不一致,所以要使用row格式

row格式比较占空间,同时也更要耗费IO资源,影响执行速度

所以采用这种方案,采用mixed格式,MySQL自己会判断这条SQL语句是否可能引起主备不一致,如果可能,使用row格式,否则使用statement格式。

row格式对于恢复数据有何好处

现在,越来越多场景要求使用row格式的binlog,可以从delete、insert、update三种sql语句角度看待这个问题。

使用delete语句,row格式会把被删除的行的整行信息保存。所以删错之后,只需要把binlog记录的delete语句转成insert就能恢复了。

使用insert语句,row格式会记录所有的字段信息。所以插入错误的时候,只需要把binlog记录的insert语句转成delete语句就能恢复了。

使用update语句,binlog会记录修改前整行的数据和修改后的整行数据。所以如果update误执行,只需要把event前后的两行信息对调,再去数据库执行,就能恢复数据了。

M-M结构的循环复制问题以及解决方案

M-S结构 M-M结构

图1是M-S结构,但是现在常用的是M-M结构,M-M结构区别在于:节点A与节点B总是互为主备关系,所以在切换的时候就不用修改主备关系了。

M-M存在循环复制问题:

在节点A更新一个语句,把生成的binlog发给节点B。

节点B执行完更新语句后也会生成binlog。

如果A同时为B的备库,A会把节点B新生成的binlog拿过去执行。节点A和B之间会不断循环执行这个更新语句。

解决方案:

已知MySQL在binlog中记录了命令第一次执行所在实例的server id。

1、规定两个库的server id 必须不同。若相同,则不能设定为主备关系

2、备库接到binlog,生成与原binlog的server id相同的新的binlog

3、每个库在收到从自己的主库发过来的日志后,先判断server id,如果和自己的相同,表示这个日志是自己生成的,丢弃这个日志。

所以使用M-M结构的日志执行流程如下:

1、从节点A更新的事务,binlog里记录的都是A的server id

2、传到节点B执行一次后,节点B生成的binlog的server id 也是A的server id

3、再传给节点A,A判断这个server id与自己的相同,不处理这个日志

《MySQL——主备一致性六问六答》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. linux安装ncurses教程,Linux ncurses安装教程(2种方法)
  2. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer
  3. 精简ABP的模块依赖
  4. 13.5.SolrCloud集群使用手册之数据导入
  5. 项目优化经验mdash;mdash;垃圾回收导致的性能问题[z]
  6. 鸿蒙硬件HI3861-连接WIFI
  7. 为资产分类定义折旧范围_SAP 固定资产的配置与逻辑 -
  8. 新手tiktok怎么做?海外tiktok怎么赚钱!
  9. 解决Required String parameter xxx is not present异常
  10. css相对单位和绝对单位
  11. 月薪5000和年薪百万的差距在哪里?
  12. 进入黑客的世界:Kali Linux 中的 Metasploit 渗透测试利器
  13. Oracle递归死循环怎么办?
  14. [NOIP2016PJ]魔法阵
  15. 《软件创富》 序:1997前后
  16. Java 面试题(持续更,最后一次更新时间:2021/4/2)
  17. Echart佛山五区地图-动态地图-江西地图
  18. 企业网站关键词优化的步骤
  19. psm倾向得分匹配法举例_一文了解什么是倾向得分匹配PSM?
  20. Python---实现飞机大战源码

热门文章

  1. linux生成文件清单,Linux 获取文件名称生成列表 txt - create_filelist
  2. 多生产者_通知:生产者补贴!打卡时间!定了
  3. docker更换国内镜像源
  4. dataframe建一个空的,创建一个空的Pandas DataFrame,然后填充它?
  5. ccf命令行选项只能用c实现_CCF-201403-3-命令行选项
  6. npp夜光数据介绍 viirs_科研成果快报第177期:中国地区长时序AVHRR气溶胶数据的主要问题: 气溶胶反演频次与重污染天气...
  7. React中ref的使用方法
  8. CSS块元素水平垂直居中的实现技巧
  9. 笔记 — 动画效果(Css3)
  10. C 语言实例 - 使用结构体(struct)