《MySQL——主备一致性六问六答》

目录

    • 备库为什么要设置为只读模式?
    • 备库设置为只读,如何与主库保持同步更新?
    • 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与自己的相同,不处理这个日志

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

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

相关文章

代码管理工具

http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspx转载于:https://www.cnblogs.com/hebeiDGL/archive/2012/09/25/2700961.html

fyi 在邮件里是什么意思_FYI的完整形式是什么?

fyi 在邮件里是什么意思仅供参考:供您参考 (FYI: For Your Information) FYI is an acronym of "For Your Information". It is a widespread internet slang used these days in text messaging, instant messaging, and chatting on Facebook, WhatsApp…

Hyper-V 替换 vmwp

要激活 Hyper-V 下的虚机 最简单的方法是用带证书的vmwp替换掉原来的 带证书的vmwp参见:http://bbs.pcbeta.com/viewthread-1408240-1-1.html 下载后腰替换 先把 Hyper-V 的俩服务停止掉 然后找到 C:\Windows\System32\vmwp.exe 右键--安全 替换掉所有者 然后给自己…

《MySQL——主备切换流程与主备延迟》

目录主备切换主备延迟的原因可靠性优先策略的主备切换流程可用性优先策略的主备切换流程主备切换 主备切换分为主动运维与被动操作。 软件升级、主库所在机器按计划下线为主动运维。 主库所在机器掉电为被动操作。 同步延迟 1、主库A执行完一个事务,写入binlog…

ejb模式_EJB的完整形式是什么?

ejb模式EJB:企业Java Bean (EJB: Enterprise Java Bean) EJB is an abbreviation of Enterprise Java Bean. EJB is one of many Java application programming interfaces (API) for flexible and manageable structuring of Java Platform, Enterprise Edition (J…

Android之PreferenceActivity

http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html 看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。 PerferenceActivity是什么,看下…

浅谈算法和数据结构: 七 二叉查找树

前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点。…

scala部分应用函数_Scala中的部分函数

scala部分应用函数Scala部分功能 (Scala partial functions) A partial function is a function that returns values only for a specific set of values i.e. this function is not able to return values for some input values. This function is defined so that only som…

《MySQL——备库多线程复制策略。》

目录备库并行复制能力MySQL5.6版本 并行复制策略MariaDB 并行复制策略MySQL5.7版本 并行复制策略MySQL5.7.22版本 并行复制策略总结备库并行复制能力 主要涉及两个方面的并行度: 1、客户端写入主库的能力 2、备库上sql_thread执行中转日志relay log 1的并行能力…

人脸是门大生意

我们正处在一个新时代的入口。人有70%的能量是被大脑消耗,大脑90%的能量用来处理视觉信息,人脸则承载了绝大部分的视觉信息。我们要讨论的是一个比Google Glass更酷的世界。文/程苓峰-云科技网易邮箱的用户已经可以用人脸而不是密码来验证登陆。安卓4.0实…

【SQL】sql版Split函数。用于拆分字符串为单列表格

【SQL】sql版Split函数。用于拆分字符串为单列表格 功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行。可选是否移除空格子串和重复项。市面上类似的函数不算少,但大…

线描算法

线描算法 (Line drawing algorithms) The equation for a straight line is ymxb 直线方程为y mx b In this m represent a slope of a line which can be calculated by the my2-y1/x2-x1 where (x1, y1) are the starting position of the points and (x2, y2) are the end…

为移动端网页构造快速响应按钮

背景 在谷歌,我们不断地推测手机网页应用的可能性。像HTML5这样的技术使我们网页版的应用以及运行在手机设备上的原生应用。而这些技术的成就之一就是我们开发了一种新的创建按钮的方法,使按钮的响应时间远远快于一般的HTML按钮。在此之前的按钮或者其他…

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解使用教程 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解使用教程 Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制…

《MySQL——基于位点orGTID的主备切换协议》

一主多从的设置,用于读写分离,主库负责所有的写入和一部分读,其他读请求则由从库分担。 一主多从架构下,主库故障后的主备切换问题。相比于一主一备,多了从库指向新主库的过程。 基于位点的主备切换同步 把节点B设…

数据科学和统计学_数据科学中的统计

数据科学和统计学统计 (Statistics) Statistics are utilized to process complex issues in reality with the goal that Data Scientists and Analysts can search for important patterns and changes in Data. In straightforward words, Statistics can be utilized to ge…

java随机数生成(固定位数)

随机生成 a 到 b (不包含b)的整数:(int)(Math.random()*(b-a))a; 随机生成 a 到 b (包含b)的整数:(int)(Math.random()*(b-a1))a;转载于:https://www.cnblogs.com/zhwl/p/3624726.html

POJ 3670 Eating Together

POJ_3670 由于递增和递减是类似的,下面不妨只讨论变成递增序列的情况。 由于Di只有三个数,所以可以考虑将序列分割成三部分,第一部分全部变成1,第二部分全部变成2,第三部分全部变成3。然后我们枚举3开始的位置&#xf…

《MySQL——如何解决一主多从的读写分离的过期读问题》

目录两种架构两种架构特点强制走主库方案Sleep方案判断主备无延迟方案配合semi-sync等主库位点方案GTID方案两种架构 基于一主多从的读写分离,如何处理主备延迟导致的读写分离问题。 读写分离的主要目标:分摊主库压力。 有两种架构: 1、客…

json/ 发送形式_24/7的完整形式是什么?

json/ 发送形式24/7:二十四 (24/7: Twenty-Four Seven) 24/7 or 24-7 service, which generally marked "twenty-four seven" is service that is existing at any time and typically, every day in trade business and industry. Substitute orthograph…