MySQL主备同步与主从同步

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

主备同步

MySQL通过binlog实现主备同步,其中实现的主要原理是binlog。在主备同步中从库B会设置为readonly。在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的。当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的备库。
在这里插入图片描述
备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:

  1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。
  2. 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。
  3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。
  4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
  5. sql_thread 读取中转日志,解析出日志里的命令,并执行。
    在这里插入图片描述

binlog三种格式对比

binlog_format=statement 时,binlog 里面记录的就是 SQL 语句的原文。(可能造成主备不一致,原因在于如果删除语句加了limit,那么主库备库可能使用的索引不一样,导致主备不一致)。
binlog_format=‘row’,借助 mysqlbinlog 工具,binlog 里面记录了真实删除行的主键 id(但是占空间较大)。
binlog_format=‘mixed’:statement格式会造成主备不一致,row格式又比较占空间,设置为 mixed 后,就会记录为 row 格式;而如果执行的语句去掉 limit 1,就会记录为 statement 格式。

目前最优row,其原因在于:

  • delete 语句,row 格式的 binlog 也会把被删掉的行的整行信息保存起来。所以,如果你在执行完一条 delete 语句以后,发现删错数据了,可以直接把 binlog 中记录的 delete 语句转成 insert,把被错删的数据插入回去就可以恢复了。
  • insert 语句,那就更直接了。row 格式下,insert 语句的 binlog 里会记录所有的字段信息,这些信息可以用来精确定位刚刚被插入的那一行。这时,你直接把 insert 语句转成 delete 语句,删除掉这被误插入的一行数据就可以了。
  • update 语句,binlog 里面会记录修改前整行的数据和修改后的整行数据。所以,如果你误执行了 update 语句的话,只需要把这个 event 前后的两行信息对调一下,再去数据库里面执行,就能恢复这个更新操作了。

循环复制问题

文章中第一张图描述的是M-S结构下的主备同步,即一个Master一个Slave,而双M结构下互为主备关系:
在这里插入图片描述

问题背景:业务逻辑在节点 A 上更新了一条语句,然后再把生成的 binlog 发给节点 B,节点 B 执行完这条更新语句后也会生成 binlog。那么,如果节点 A 同时是节点 B 的备库,相当于又把节点 B 新生成的 binlog 拿过来执行了一次,然后节点 A 和 B 间,会不断地循环执行这个更新语句,也就是循环复制了。
解决办法(判断serverid,相同则丢弃):

  1. 规定两个库的 server id 必须不同,如果相同,则它们之间不能设定为主备关系;
  2. 一个备库接到 binlog 并在重放的过程中,生成与原 binlog 的 server id 相同的新的 binlog;
  3. 每个库在收到从自己的主库发过来的日志后,先判断 server id,如果跟自己的相同,表示这个日志是自己生成的,就直接丢弃这个日志。

主备延迟问题

与主备同步有关的时间点主要包括以下三个:

  1. 主库 A 执行完成一个事务,写入 binlog,我们把这个时刻记为 T1;
  2. 之后传给备库 B,我们把备库 B 接收完这个 binlog 的时刻记为 T2;
  3. 备库 B 执行完成这个事务,我们把这个时刻记为 T3。

主备延迟,就是同一个事务,在备库执行完

MySQL高可用之同步MySQL是如何保证一致的 🏆今日学习目标:🍀MySql是如何保证一致的 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人页:林在闪闪发光的个人页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在闪闪发光的社区目录一 什么叫同步同步的好处三 同步的实现原理四. binlog的三种格式 五. 为什么会有mixd格式的binlog? 六 常见的两种切换流程M-S结构双M结构双M结构的循环复制问题同步,也叫从复制,是MySQL提供的一种高可用的解决方案,保证数据一致性的解决方案。在生产环境中, 阅读详情

相关推荐

Mysql数据库服务器搭建

一,引入mysql份 1,为什么要做份 防止数据丢失,数据的热份,架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘 I/O访问的频率,提高单个机器的I/O性能 2,什么是mysqlMySQL 从复制是指数据可以从一个MySQL数据库服务器节点复制到一个或多个从节点。 MySQL 默认采用异步复制方式,这样从节点不用一直访问服务器来更新自己的数据,数据的更新可 以在远程连接上进行,从节点可以复制数据库中的所有数据库或者特定的数据库

无求道贾的博客 9220

MySQL从和的区别

库 show master status\G 库 show slave status\G 从库 show slave status\G Relay_Log_Pos

喝醉酒的小白 1万+

MySQL高可用之同步MySQL是如何保证一致的?

在开头跟大家分享的时候我就说,面试我是没有做好准的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准好了或许可以拿个40k,没做准只有30k+,你们懂那种感觉吗)如何准面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

2401_84011132的博客 635

MySQL如何保证一致?

如下图展示的是基本的切换流程:在状态1中,库是A,库是B,所以客户端的读写都直接方法节点A。由于节点B是节点A的库,所以库B只是将A的更新都同步过来,本地执行,这样可以保证节点B和节点A的数据一致性。如果发生切换,就会从状态1变成状态2,节点A成为库,节点B成为库。在状态1中,虽然节点B没有被客户端直接方法,但是还是接下来我们看下节点A到节点B的流程图:实际上库B和库A之间维持了个长连接,库A中有一个线程(dump_thread),专门用于服务和库B的长连接。

热爱永不过时! 820

mysql延迟测试_MySQL 主从同步延迟的测试探讨

背景如果,初次配置完成了 mySQL数据库的读写分离操作那么,后面遇到稍大流量访问时;首先遭遇到的便是 【“主从同步延迟”】 造成的后果环境Linux系统: CentOS7.2mySQL版本: mySQL5.7.32MySQL数据库主从同步延迟原理 (摘抄经验)DDL : 数据定义语言, DML :数据操纵语言MySQL从复制都是单线程的操作,库对所有 DDL 和 DML 产生的日志写进 b...

weixin_42613360的博客 996

Mysql集群:主从同步,负载均读写分离

MySQL主从同步(Master-Slave Replication)是一种常用的数据库冗余和扩展策略。在这种架构中,一个MySQL服务器(称为服务器,Master)将数据更改复制到一个或多个其他服务器(称为从服务器,Slave)。

weixin_74412978的博客 1502

Mysql 5.6 双高可用(Keepalived+mysql) (一)

安装环境:Redhat 5.8 mysql版本:mysql-5.6.25 DB机器A:192.168.8.193 机名:mysql01 DB机器B:192.168.8.194 机名:mysql02 mysql VIP(IP) :192.168.8.198 ---------------------------------------------------------------

Shen_Guo的博客 3327

rds mysql方案_简单说说RDS的从功能是如何实现

什么是RDS高可用目前睿江云已经推出的RDS数据库,也已经将以上提到的高可用,进行了融合。用户无需进行上面的配置,直接选购即可使用。相信不少的读者朋友,数据库的使用经验,相信使用的最多得应该是MYsql这个数据库软件了。如果一台系统能够不间断的提供服务,那么这台系统的可用性据说100%。那如果系统每运行100个时间单位,就会出现1个时间单位无法提供服务,那么该台系统的可用性是99%。数据库除了定期...

weixin_39589511的博客 485

Mysql keepalived 实现高可用

1.MySQL)架构方案思路是: 2.环境(这里只介绍2台的配置方案): 3.创建过程 3.3 创建数据库相关账户并开户主从同步 3.4 测试主从同步 4.配置keepalived 高可用 5.模拟测试mysqld高可用 1.MySQL)架构方案思路是: 1.两台mysql都可读写,互为,默认只使用一台(masterA)负责数据的写入,另一台(mast...

a1779078902的博客 308

mysql 优化配置 大批量数据插入_MySQL数据库份之主从同步配置

原文:http://www.enmotech.com/web/detail/1/715/1.html(复制链接,打开浏览器即可查看原文)导读:本文介绍MySQL数据库份之主从同步配置,通过将腾讯云服务器上的MySQL份到本地服务器中这个例子来做出展开解释。主从同步意义?主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当服务器(master),其余的服务器充...

weixin_36124750的博客 273

MySql是如何保证一致的?

MySql如何保证一致性

hncujing的专栏 632

Mysql主从同步配置

MySQL 的二进制日志可以说 MySQL 最重要的日志了,它记录了所有的 DDL 和 DML(除 了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。一般来说开启二进制日志大概会有 1%的性能损耗。二进制有两个最重要的使用场景:其一:MySQL Replication 在 Master 端开启 Binlog,Master 把它的二进制日志传递给 Slaves 来达到 Master-Slave 数据一致的目的。

LoveSummer 4万+

gitlab同步

:10.10.10.75:10.10.10.16方案思路:mysql主从同步+gitlab文件目录同步(inotify+rsync)一,配置mysql主从同步mysql版本:5.5.43)修改75的mysql配置文件 vim /etc/mysql/my.cnfserver-id=1binlog_do-db=gitlab库重启mysql修改16机的mysql配置文件vim /etc/mysq...

蒙瑞文 1万+

MySQL高可用之同步MySQL是如何保证一致的_mysql 同步

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是大厂擦肩而过。我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。

2401_84103616的博客 1431

MySQL主从同步(一一从、一多从、从从)等结构的概述配置

前言:前面我们了解了MySQL数据库的基础知识,今天及接下来的五天时间里我会给大家带来MySQL进阶方面的一些学习总结,如有不足,还请大家留言指出;下面我们就开始今天的内容。 ** 部署mysql主从同步结构 **  主从同步概述 MYSQL主从同步 客户端访问库,从库复制、同步库的所有操作 单项复制时,建议将从库设置为只读 主从同步原理——从库 从机上同步数据的工作过程 Master...

BELONE 3万+

MySQL高可用之同步MySQL是如何保证一致的?_mysql 高可用同步

外链图片转存中…(img-tuPGhXIz-1712853727683)]

2401_84182392的博客 1037

gitlab同步_gitlab同步

:10.10.10.75:10.10.10.16方案思路:mysql主从同步+gitlab文件目录同步(inotify+rsync)一,配置mysql主从同步(mysql版本:5.5.43)修改75的mysql配置文件vim /etc/mysql/my.cnfserver-id=1binlog_do-db=gitlab库 重启mysql修改16机的mysql配置文件vim /etc/mysq...

weixin_39583013的博客 1649

MySQL同步原理及过程

同步流程图:

ArtAndLife的博客 5196
上一篇: redolog与binlog笔记
下一篇: MySQL性能优化总结(更新)
香草星冰乐
博客等级 码龄7年 21粉丝 46原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值