mysql 主备复制下的可靠性漫谈(三)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

引言:

   前面两期主要针对各种故障条件下,对数据可靠性带来的挑战及普通应对策略。本文主要针对在主备非强同步复制模式下,能否保证数据可靠性来讨论。

复制模式概述:

    异步模式:主库收到commit 请求后,依次执行:写redo log prepare,写入binlog,写redo log commit,返回客户端成功。

        半同步模式:主库收到commit 后,依次执行 redo log prepare,写binlog/发往备库(两个步骤并行),等待备库回复收到ack,redo log commit,给用户回复成功。这个有一个等待ack的超时,当超过设置的时长,那么自动降级为异步模式;当网络或备库恢复后,备库IO线程开始追赶主库,当追上后,复制模式会自动升级为半同步模式。

         强同步模式:主库收到commit 后,依次执行 redo log prepare,写binlog/发往备库(并行),等待备库fsync到磁盘后,redo log commit ,给用户恢复成功。

保证可靠性:

   异步模式下,由于主库写入事务时,不会传递到备库(无论物理复制还是逻辑复制),那么当主库down机时,备库数据和主库是很可能不一致的,所以此时是无法保证可靠性的。对于我们阿里云用户使用的mysql库,在此模式下就没任何办法了么?其实不是,在此模式下,我们提供了以下的措施来最大限度的保证主备一致性:

   1)备库一定是在应用完所有传递到备库的日志后,才开放可写。这样就最大限度保证备库的数据线是一致的,不会导致双写的问题(一边应用日志,一边接受写入)。

   2)主库增加时间戳,通过复制关系同步到备库,当主库故障时,HA系统(数据库高可用系统)通过比对最后一次成功写入主库的时间戳及备库上从主库接受到日志后应用掉后的时间戳进行比较,当大于某个阀值时,不做链路切换动作。这样能够保证主备间数据不一致的时间长度在可控范围内。

   3)判断主库故障的条件更加苛刻,当不是主库所在主机是不可恢复的故障时,优先使用主库重启的方式来解决,确保数据线的一致性。


   半同步模式下,当网络与主备库都正常情况下,主备库的数据一定是最终一致的(备库需要应用relay日志),当主库故障时,要么事务在主库还没有应用,没有传递日志到备库;要么事务在主库应用了,日志也传递到了备库。所以最终是一致的。


   那么是不是半同步下,数据就不丢了呢?我们前面说过,当网络,和备库出现间歇性问题时,那么半同步会降级为异步,那么如果恰恰在此时,备库的IO线程正在追赶主库的binlog位点,但是还没有完全同步上,主库down了(也就是说此时出现延迟的情况下),主备数据就会出现不一致。


   针对这个问题,我们研发了double binlog复制模式,该模式是在半同步基础上更进一步,在主备库间除了半同步复制通路,同时还有一个异步复制通路,平时在主备库及网络都健康情况下,由半同步通路持续的保持复制关系,确保主备数据一致;但是当在备库或主备间网络出现问题,一旦备库或网络恢复后,备库不再使用单一的链路来复制binlog,会同时开启两条复制链路,一条继续从上次备库最后一次接到的位点来复制,一条从主库写入的最新一条事务日志来复制,那么落后的复制不必追赶到最新的主库binlog位置才升级为半同步,而是追赶到备库恢复后的位点即可。这时两条复制通路的binlog就可以完整接上,然后等待备库继续掉日志后,主备数据就完全同步了。


总结:


   所以通过这个特性,我们能做到在主备出现延迟后,依然能够保证主备的一致性。目前金融专有云已经开始使用该复制模式,对数据要求性高的朋友依然可以使用mysql一主一备的低成本方式来满足企业的日常需求。










相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
面试官:说一下MySQL主从复制的原理?
面试官:说一下MySQL主从复制的原理?
160 0
面试官:说一下MySQL主从复制的原理?
|
5月前
|
SQL 运维 关系型数据库
如何对比MySQL主备数据的一致性?
如何在数据库世界中处理大批量数据变更操作,而不影响业务运行。NineData的OnlineDML解决方案通过无锁方式实现数据变更,确保在线业务的顺畅运行。只需两步操作即可开启OnlineDML功能,让NineData自动处理大型DML操作,分批执行并根据数据库压力进行智能调整,简化操作流程并提供直观操作界面。
361 2
如何对比MySQL主备数据的一致性?
|
12月前
|
SQL 存储 关系型数据库
MySQL主从复制之原理&一主一从部署流程—2023.04
MySQL主从复制之原理&一主一从部署流程—2023.04
371 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL中主从复制的原理和配置命令
要原因包括提高性能、实现高可用性、数据备份和灾难恢复。了解两大线程( I/O 和 SQL)I/O线程:目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin server
128 1
MySQL中主从复制的原理和配置命令
|
2月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
51 0
|
2月前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
791 1
|
5月前
|
SQL 监控 关系型数据库
MySQL 如何保证主备的数据一致性的?
MySQL通过使用主从复制(Master-Slave Replication)来实现主备的数据一致性。主从复制是一种常见的数据复制技术,它将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个其他MySQL数据库服务器(从服务器),以实现数据的冗余备份、读写分离等目的。以下是MySQL保证主备数据一致性的一些关键点: 1. **二进制日志(Binary Log)**:主服务器将所有的数据更改操作(如INSERT、UPDATE、DELETE)以二进制日志的形式记录下来,并定期将这些日志发送给从服务器。从服务器收到二进制日志后,按照主服务器的执行顺序逐条应用这些日志,从而保持数据的一致性
1001 0
|
5月前
|
关系型数据库 MySQL Linux
【mysql】MySql主从复制,从原理到实践!
【mysql】MySql主从复制,从原理到实践!
111 0
|
SQL 存储 关系型数据库
京东二面:MySQL 主备延迟有哪些坑?主备切换策略
一、什么是高可用? 维基百科定义: 高可用性(high availability,缩写 HA),指系统无中断地执行其功能的能力,代表系统的可用性程度。高可用性通常通过提高系统的容错能力来实现。 MySQL 的高可用是如何实现的呢?
|
5月前
|
SQL 容灾 关系型数据库
MySQL 主从复制原理
MySQL 主从复制原理
71 1
MySQL 主从复制原理
下一篇
无影云桌面