半同步复制中可能出现的异常情况以及应该如何应对?

2024-02-23 01:32

本文主要是介绍半同步复制中可能出现的异常情况以及应该如何应对?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 半同步复制如何应对各种异常情况?
    • 一、准备知识
      • 事务提交会经历哪些阶段
      • 何为半同步复制
    • 二、可能出现哪些异常以及如何解决
      • master 在flush binlog之前宕机
      • master 在flush binlog 之后,send binlog之前宕机
      • master 在send binlog之后,收到ack之前宕机

半同步复制如何应对各种异常情况?

全篇以MySQL-5.7 after_sync模式半同步为背景,sync_binlog=1.

对外承诺的数据零丢失,通过半同步复制究竟能实现吗?为了能够回答这个问题,我们必须对半同步复制中可能出现的任何异常情况进行描述,并且了解故障时的master-slave数据状态。

一、准备知识

事务提交会经历哪些阶段

  • flush binlog

将每一个线程中缓存的binlog文件写到binlog cache中(binlog_cache_size)

  • sync redo

根据innodb_flush_log_at_trx_commit=1的设置,事务提交时,redo必须落盘。

  • sync binlog

将binlog cache 写入磁盘文件

  • send binlog

触发dump线程发送binlog给slave

  • read ack

读取slave返回的ACK信息

  • commit

在Innodb存储引擎中进行提交,包括释放undo,释放锁资源等。

  • 返回给客户端提交结果

何为半同步复制

以MySQL-5.7 semisync after_sync为例,半同步复制解释为如下:
master端事务提交时,在binlog落盘之后,必须等待slave返回ack信息,才可以继续下面的操作。至于什么ACK,ACK具体包含了什么,其他地方有讲到。sync binlog是事务提交过程其中的一个阶段。

二、可能出现哪些异常以及如何解决

事务提交过程的各个阶段以及时间顺序如下图,根据下图,可以假设出一系列的故障场景,以及面对这些场景,应该如何解决?

master 在flush binlog之前宕机

  • 宕机瞬间情况描述:

    • master在flush binlog之前宕机,客户端未收到commit成功的信息。
    • binlog未落盘
    • redo可能落盘,也可能没有,因为存在一个后台线程,在没间隔innodb_flush_log_at_timeout之后,进行redo的刷盘操作。
    • slave未收到此事务的binlog,slave中不会存在此数据。
  • 假设只有一个半同步slave,并且rpl_semi_sync_master_wait_for_slave_count=1,那么对应的切换逻辑如下:

    • 查看relay log是否被消费完成
    • 切换为master(通过域名或者SIP,入口改变应该注意的事项不在本次讨论范围之内,比如说arp,DNS缓存等等)
  • 切换后的master修复

    • binlog中不存在对应的提交失败的事务
    • redo中可能有,也可能没有
    • MySQL会回滚掉相关提交失败的事务
    • 数据和半同步 slave保持一致。

自己可以尝试分析下面这些场景,并进行描述。明天再更新

master 在flush binlog 之后,send binlog之前宕机

master 在send binlog之后,收到ack之前宕机

等等。

这篇关于半同步复制中可能出现的异常情况以及应该如何应对?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737109

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

查看MySql主从同步的偏移量方式

《查看MySql主从同步的偏移量方式》:本文主要介绍查看MySql主从同步的偏移量方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 1.mysql的主从同步方案mysqlphp为了在实现读写分离,主库写,从库读mysql的同步方案主要是通过从库读取主库的binl

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结