广告
返回顶部
首页 > 资讯 > 数据库 >MySQL实战之主从数据同步机制
  • 720
分享到

MySQL实战之主从数据同步机制

mysql数据库java 2023-09-08 21:09:25 720人浏览 八月长安
摘要

主从同步的重要性: 解决数据可靠性的问题需要用到主从同步;解决 Mysql 服务高可用要用到主从同步;应对高并发的时候,还是要用到主从同步。 一、mysql 主从同步流程 当客户端提交一个事务到 Mysql 的集群,直到客户端收到集群返回

主从同步的重要性:

  • 解决数据可靠性的问题需要用到主从同步;
  • 解决 Mysql 服务高可用要用到主从同步;
  • 应对高并发的时候,还是要用到主从同步。

一、mysql 主从同步流程

当客户端提交一个事务到 Mysql集群,直到客户端收到集群返回成功响应,在这个过程中,MySQL 集群需要执行很多操作:

  • 主库需要:
  • 提交事务
  • 更新存储引擎中的数据
  • 把 Binlog 写到磁盘上
  • 给客户端返回响应
  • 把 Binlog 复制到所有从库上
  • 每个从库需要
  • 把复制过来的 Binlog 写到暂存日志
  • 回放这个 Binlog
  • 更新存储引擎中的数据
  • 给主库返回复制成功的响应

这些操作的时序非常重要,这里面的 时序,说的就是这些 操作的先后顺序。同样的操作,因为时序不同,对应用程序来说,有很大的差异。

比如说,如果先复制 Binlog,等 Binlog 复制到从节点上之后,主节点再去提交事务,这种情况下,从节点的 Binlog 一直和主节点是同步的,任何情况下主节点宕机也不会丢数据。

但如果把这个时序倒过来,先提交事务再复制 Binlog,性能就会非常好,但是存在丢数据的风险。

MySQL 提供了几个参数来配置这个时序,我们先看一下默认情况下的时序是什么样的。

二、主从同步的三种方式

1、异步复制

默认情况下,MySQL 采用异步复制的方式,执行事务操作的线程不会等复制 Binlog 的线程。

MySQL 主库在收到客户端提交事务的请求之后,会先写入 Binlog,然后再提交事务,更新存储引擎中的数据,事务提交完成后,给客户端返回操作成功的响应。

同时,从库会有一个专门的 复制线程,从主库接收 Binlog,然后把 Binlog 写到一个中继日志里面,再给主库返回复制成功的响应。

从库还有另外一个 回放 Binlog 的线程,去读中继日志,然后回放 Binlog 更新存储引擎中的数据,这个过程和我们今天讨论的主从复制关系不大,所以我并没有在图中画出来。

提交事务和复制这两个流程在不同的线程中执行,互相不会等待,这是异步复制。

掌握了异步复制的时序之后,我们就很容易理解之前几节课中讲到的一些问题的原因了。

比如说,在异步复制的情况下,为什么主库宕机存在丢数据的风险?为什么读写分离存在读到脏数据的问题?

产生这些问题,都是因为 异步复制它没有办法保证数据能第一时间复制到从库上。

异步复制的优势是性能好,缺点是数据的安全性比较差。在某一刻主从之间的数据差异可能较大,主机挂掉之后从机接管,可能会丢失一部分数据。

2、同步复制

全同步复制跟半同步复制的区别是,全同步复制必须收到所有从库的ack,才会提交事务。

同步复制这种方式在实际项目中,基本上没法用,原因有两个:

  • 一是性能很差,因为要复制到所有节点才返回响应;
  • 二是可用性也很差,主库和所有从库任何一个数据库出问题,都会影响业务。

全同步复制的数据一致性最好,但是性能也是最差的。

3、半同步复制

为了解决这个问题,MySQL 从 5.7 版本开始,增加一种 半同步复制(Semisynchronous Replication)的方式。

  • 异步复制是,事务线程完全不等复制响应;
  • 同步复制是,事务线程要等待所有的复制响应;
  • 半同步复制介于二者之间,事务线程不用等着所有的复制成功响应,只要一部分复制响应回来之后,就可以给客户端返回了。

master更新操作写入binlog之后会主动通知slave,slave接收到之后写入relay log 即可应答,master只要收到至少一个ack应答,则会提交事务。

可以发现,相比较于异步复制,半同步复制需要依赖至少一个slave将binlog写入relay log,在性能上有所降低,但是可以保证至少有一个从库跟master的数据是一致的,数据的安全性提高。

  

  

半同步复制的方式,它兼顾了异步复制和同步复制的优点。如果主库宕机,至少还有一个从库有最新的数据,不存在丢数据的风险。

并且,半同步复制的性能也还凑合,也能提供高可用保证,从库宕机也不会影响主库提供服务。所以,半同步复制这种折中的复制方式,也是一种不错的选择。

三、半同步复制的注意问题

接下来我跟你说一下,在实际应用过程中,选择半同步复制需要特别注意的几个问题。

配置半同步复制的时候,有一个重要的参数 rpl_semi_sync_master_wait_no_slave,含义是:「至少等待数据复制到几个从节点再返回」。

这个数量配置的越大,丢数据的风险越小,但是集群的性能和可用性就越差。最大可以配置成和从节点的数量一样,这样就变成了同步复制。

一般情况下,配成默认值 1 也就够了,这样性能损失最小,可用性也很高,只要还有一个从库活着,就不影响主库读写。丢

数据的风险也不大,只有在恰好主库和那个有最新数据的从库一起坏掉的情况下,才有可能丢数据。

另外一个重要的参数是 rpl_semi_sync_master_wait_point,这个参数 控制主库执行事务的线程,是在提交事务之前(AFTER_SYNC)等待复制,还是在提交事务之后(AFTER_COMMIT)等待复制。默认是 AFTER_SYNC,也就是先等待复制,再提交事务,这样完全不会丢数据。AFTER_COMMIT 具有更好的性能,不会长时间表,但还是存在宕机丢数据的风险。

另外,虽然我们配置了同步或者半同步复制,并且要等待复制成功后再提交事务,还是有一种特别容易被忽略、可能存在丢数据风险的情况。

如果说,主库提交事务的线程等待复制的时间超时了,这种情况下事务仍然会被正常提交。并且,MySQL 会自动降级为异步复制模式,直到有足够多(rpl_semi_sync_master_wait_no_slave)的从库追上主库,才能恢复成半同步复制。如果这个期间主库宕机,仍然存在丢数据的风险。

来源地址:https://blog.csdn.net/leread/article/details/130621742

您可能感兴趣的文档:

--结束END--

本文标题: MySQL实战之主从数据同步机制

本文链接: https://www.lsjlt.com/news/400657.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL实战之主从数据同步机制
    主从同步的重要性: 解决数据可靠性的问题需要用到主从同步;解决 MySQL 服务高可用要用到主从同步;应对高并发的时候,还是要用到主从同步。 一、MySQL 主从同步流程 当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回...
    99+
    2023-09-08
    mysql 数据库 java
  • MySQL数据库之主从同步
    一、概述:MYSQL主从同步架构是目前使用最多的数据库架构之一,主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(sl...
    99+
    2022-10-18
  • MySQL数据库主从同步实战过程详解
    本文实例讲述了MySQL数据库主从同步实战过程。分享给大家供大家参考,具体如下: 接上一篇:MySQL数据库入门之备份数据库 安装环境说明 系统环境: [root@~]# cat /etc/redhat-rele...
    99+
    2022-05-26
    MySQL 数据库 主从同步
  • Docker实战之MySQL主从复制
    前言 曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批? 其实很多时候,我们所缺少的只是对高大上的技术的演练。没有相关的业务需求...
    99+
    2016-09-20
    Docker实战之MySQL主从复制
  • mysql主从同步机制原理
    本篇内容主要讲解“mysql主从同步机制原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql主从同步机制原理”吧! 1、binlog+pos同步(默认...
    99+
    2022-10-18
  • mysql数据库主从同步之双主配置----互为主从
    Mysql数据库复制原理:整体上来说,复制有3个步骤:   (1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log even...
    99+
    2022-10-18
  • MySQL中怎么实现主从同步机制
    MySQL中怎么实现主从同步机制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最直观的表现为:mysql> show ...
    99+
    2022-10-18
  • MySQL主从复制之半同步semi-sync replication
    目录一、半同步简介二、两种模式介绍三、两种方式比较四、如何开启半同步五、查看插件开启情况六、开启半同步功能七、查看半同步是否运行八、半同步参数信息九、半同步状态信息十、测试一下半同步...
    99+
    2022-11-13
  • 实现↝Mysql数据库主从复制搭建与同步
    实现↝Mysql数据库主从复制搭建与同步 🔻 一、mysql 同步复制有关概述⛳ 前言、何为主从复制⛳ 1.1 mysql支持的复制方式⛳ 1.2 mysql支持的复制类型1....
    99+
    2023-09-17
    数据库 mysql msyql主从复制 linux 运维 服务器 centos
  • MariaDB、MySQL数据库主从同步
    1、Mysql主从同步异步概念    异步:主服务器写完日志后立即返回同步完成消息,不受从服务器的状态和影响,mysql默认为异步工作模式  &n...
    99+
    2022-10-18
  • Mysql 主从复制之半同步复制(基于gtid)
    Mysql主从复制mysql主从复制原理:从库有两个线程IO线程和SQL线程1.从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输;2.主库IO线程对比从库发送过来的maste...
    99+
    2022-10-18
  • Shell脚本实战之DNS主从同步脚本实例
    DNS主从同步脚本实例 PS:两个服务器起好后最好两个服务都重启一下 主服务器配置 #!/bin/bash #DNS主从同步——主服务器 rpm -q bind if [ $? -ne 0 ];the...
    99+
    2022-06-04
    Shell DNS主从同步
  • Mysql主从同步的实现原理与配置实战
    1、什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。 2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availab...
    99+
    2020-03-11
    Mysql主从同步的实现原理与配置实战
  • MySQL数据库主从同步的实现方法
    这篇文章主要讲解了MySQL数据库主从同步的实现方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。安装环境说明系统环境:[root@~]# cat /etc/redhat-re...
    99+
    2022-10-18
  • MySQL数据库主从同步(单台2实例)
    一 前戏#安装yum install -y mysql-server mysql mysql-devel #不同实例目录mkdir /data/{3306,3307} -p   # 授权...
    99+
    2022-10-18
  • Mysql 中怎么实现主从数据库同步
    这篇文章给大家介绍Mysql 中怎么实现主从数据库同步,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、主服务器1.1、创建一个复制用户,具有replication slave 权限。...
    99+
    2022-10-18
  • MYSQL数据库主从同步设置的实现步骤
    目录为什么要主从同步?主从同步的原理MYSQL数据库进行主从同步创建两个MYSQL数据库初始化,安装主机数据库配置从机测试主从同步为什么要主从同步? 1、读写分离 主从同步分为一个主...
    99+
    2022-11-13
  • mysql数据备份-主从同步恢复
    【1】数据库备份和恢复 1、xtrabackup-物理备份 全量备份主库数据:xtrabackup --backup --user=root --password=xxx --port=3306 --...
    99+
    2023-09-14
    mysql 数据库 服务器
  • Mysql数据库的主从同步配置
    目录Mysql主从同步配置1、安装两个 mysql 2、编写mysql配置文件3、初始化数据4、其他mysql 相关命令Mysql主从同步配置 配置准备: 需要两个数据库...
    99+
    2022-11-12
  • MYSQL数据库怎么设置主从同步
    本篇文章为大家展示了MYSQL数据库怎么设置主从同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、配置主数据库主master : 192.168.1.132从slave : 192.168.1....
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作