binlog数据库不写入binlog_京东智联云MySQL数据库如何保障数据的可靠性?

MySQL作为当前最流行的关系型数据库,在各个行业的系统中扮演着最重要的角色。随着大家对数据价值认可的逐步加深,数据的可靠性是最常被问到的一个问题。MySQL是如何保证数据可靠性的?京东智联云RDS-MySQL又做了哪些优化和新特性来保证用户数据的可靠性和一致性?本篇文章将为大家一一揭秘。

0158d0a7b123eea3d6da205d83606ce1.png

MySQL的Innodb存储引擎支持ACID(原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability)特性,正是因为保证了一致性和持久性,所以数据才是可靠的。很多关系型数据库为保障数据库的可靠性,同时最大限度地提升性能,采用了预写日志(Write-Ahead Logging)的方法,MySQL也不例外。它将数据变化先写入日志,然后立刻返回给客户端更新成功,真正的数据再异步更新到磁盘的数据文件。如果中间系统发生故障,只要日志在数据就不会丢失,这就保证了数据的可靠性。

MySQL写入的日志就是binlog和redo log文件,下面我们来介绍下两种日志的写入流程。

749f06da4cdfabb71f83e860c354fc96.png

事务执行过程中,MySQL会将所有变更记录到binlog cache中,在事务commit的时候一起写入binlog文件中。

binlog cache是由参数binlog_cache_size控制,默认32KB,如果事务很大,变更内容超过了binlog cache,则会写到磁盘中。通过命令show global status like 'Binlog_cache_disk_use';可以查看binlog cache写入磁盘的次数,如果数量过多,建议调大binlog_cache_size参数值。

每个线程都会分配binlog cache,但是都共用一份binlog文件。流程图如下:

0c7f4c8127fcf994da4c07a3755748f2.png

在写入到系统的日志文件中有两个步骤,write和fsync。wirte是写入操作系统的缓存,fsync是持久化到磁盘文件,这个操作会占用系统的IOPS,而它们操作的时机是通过参数sync_binlog控制。

  • sync_binlog=0,事务提交时,只做write操作,由操作系统自己控制fsync操作。这个是最危险的,一旦操作系统宕机,binlog cache中的变更内容全部会丢失。
  • sync_binlog=1,事务提交时,都会做write和fsync操作。安全性最高,但是性能损耗也是最大的。
  • sync_binlog=N,事务提交时,会做write操作,累积N个事务时做fsync操作。一旦操作系统宕机,会丢失binlog cache中部分变更内容。

7e63c5a644d5b63cd0030531f5f53fe7.png

事务执行过程中,也是先写入内存redo log buffer中,然后再写入到磁盘文件。其中redo log buffer是所有线程共用的。与binlog写到文件一样,写redo log也有write和fsync两个操作,它们操作的实际是通过参数innodb_flush_log_at_trx_commit控制。

  • nnodb_flush_log_at_trx_commit=0,事务提交时,只将变更内容写到redo log buffer,由后台Master线程每秒write和fsync到磁盘文件。
  • innodb_flush_log_at_trx_commit=1,事务提交时,执行write和fsync操作。这是最安全的配置。
  • innodb_flush_log_at_trx_commit=2,事务提交时,只执行write操作,即只写到操作系统的缓存中,由后台Master线程每秒fsync到磁盘文件。

关于这个参数与数据可靠性之间的关系如下表所示:

参数sync_binlog=1与innodb_flush_log_at_trx_commit=1就是DBA常说的“双1”配置,也是线上环境数据最安全最可靠的配置。

再对比下binlog和redo log的不同之处:

binlogredo log记录者MySQL serverInnodb引擎记录时间事务commit的时候多种条件触发,随时记录记录内容逻辑日志row格式或者statement格式物理日志数据页的变化,幂等的binlogredo log记录者MySQL serverInnodb引擎记录时间事务commit的时候多种条件触发,随时记录记录内容逻辑日志row格式或者statement格式物理日志数据页的变化,幂等的

9607d0e0c78467216cabb3784d7408a7.png

binlog和redo log是如何配合起到数据可靠性的作用呢,就不得不提到两阶段提交。它可以保证binlog和redo log的数据一致性。下图是事务提交时两个日志的记录流程:

2bf4d8b8696a28f1d3abaee0a560f64a.png

如果在此过程中出现系统异常,每个状态下都是可以保证数据一致性的。

le data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">

innodb_suport_xa参数,这个参数控制是否打开两段式提交。默认开启,如果关闭了,事务则会以不同顺序的方式写入binlog。如果宕机恢复、xtarbackup恢复,都是会有数据不一致的风险。这个参数在MySQL5.7.10后就废弃了,必须开启。

c46209b7e1eca250333eddd97d47f74b.png

MySQL发展到现在,集群也从主备异步复制、半同步复制、group replication不断发展和演变。但是它们的核心基础都是binlog,可以说MySQL的数据复制都依赖于它,而集群间的数据一致性更是与binlog有关。主要有两个点需要特别注意。

1. binlog的格式。statement、row和mixed。statement格式直接将SQL语句记录在binlog文件中,因为主从库是两个独立的服务,运行环境完全不同,所以会出现不一致的风险,比如执行delete from t limit 100。所以线上环境建议使用row格式。

2. 数据延迟。当从库出现延迟,会造成集群数据不一致。从库延迟的原因很多,这里列举以下几个线上经常出现的延迟原因:

a)大事务。binlog只有在事务commit时才会记录到文件,然后从库才能读取到数据变更,所以当有大事务的时候,主库提交后从库才开始执行。

b)大并发。5.6和5.7版本都支持并行复制,但是并行度有限,当主库并发较高时,从库会出现延迟。

c)表结构。主库表没有主键,binlog是row格式的,主库执大量行数的更新SQL时,从库会执行多次全表扫描,造成延迟。

d)等待锁。从库一般会承担备份功能,使用xtrabackup进行备份会执行FLUSH NO_WRITE_TO_BINLOG TABLES和FLUSH TABLES WITH READ LOCK操作,在特殊情况下,这两个操作会堵塞复制的SQL线程,造成延迟。

10d165c660654a947857d2177fc341e3.png

京东智联云RDS-MySQL集群使用主从复制架构,为了保证用户存储数据可靠性和安全性,我们对关键流程做了一系列优化和改善工作。以用户数据安全为己任,以用户体验为中心。

96a022636fa8147533bc9991671d695d.png

1. 物理环境

  • 硬件,采用高性能的NVME硬盘,最新型号物理机配置。
  • 网络,跨AZ机器的网络延迟在1.2ms以内,配置万兆网卡。

2. 软件环境

  • 数据面,参考京东高并发、高可靠的业务系统优化经验,京东智联云对RDS操作系统配置、MySQL参数配置做了一些列优化,保证数据库集群数据的可靠性。
  • 控制面,针对集群的延迟,有多组延迟监控、报警;针对不同延迟原因,会触发不同的优化逻辑,自动降低延迟。

8e157941097c4988f7fef57b4e145f70.png

当物理机出现问题或者做数据迁移时,都会涉及MySQL集群的高可用操作,因为MySQL集群的复制特点,有可能会出现数据丢失的情况。京东智联云RDS-MySQL在切换时是要保证用户数据一致性优先的,在判断集群数据完全可靠的情况下,再做切换操作,保证用户的数据不丢失,不写花。

c25199413a9b6e64829c9f0c2cef24ff.png

MySQL高可用切换流程的复杂性,不在切换的过程,而是触发切换条件的判断,下面介绍下RDS-MySQL自动高可用切换的判断流程。

  1. 哨兵服务检查数据库和操作系统状态,发现实例服务异常,则触发多组哨兵服务的数据库服务检查和投票机制,确认服务真实不可用再进行切换流程。
  2. 主库实时上报GTID信息,如果发生自动高可用,即主库服务不可用时,首先会对比从库的Retrieved_Gtid_Set值,确保从库的IO thread已经拉取了主库全部的binlog内容。
  3. 然后再对比从库的Retrieved_Gtid_Set和Executed_Gtid_Set范围值,保证从库拉取的binlog全部应用完成。

高可用流程切换完成后,会对集群数据做一致性校验,并触发建立新从库的流程。

cb61c60085c97f19674622af1050e824.png

数据库备份是数据安全的最重要屏障,当出现极端情况下,集群所有节点的数据都不可用,就需要依赖备份保证数据的可靠性和安全性。我们对RDS-MySQL的备份、恢复流程做了一系列优化,保证用户系统在灾备时恢复时间尽量短,恢复数据尽可能最新。

  1. 每日全量备份,实时binlog备份;
  2. 所有备份上传到对象存储,多备份保存,多区域存放;
  3. 定期做备份数据的有效性验证;
  4. 高可用、扩容、删除等重要流程强制做数据库的数据备份;
  5. 支持软删除功能,单库表恢复功能。

4e3f2c2bb9f4c92fe0e662da5712eeb4.png

京东智联云RDS-MySQL的用户在使用过程中,出现过很多数据可靠性相关的案例,下面举一些典型案例来分享:

a5b5dfb65dd93d6715d4496cb05fccfe.png
问题由于用户并发较大,集群从库出现延迟。
发现从库对于用户是不可见的,所以从库延迟用户是无需感知的。通过后台的监控系统,触发从库延迟报警,运维人员才发现这个问题。
解决后台任务会扫描所有报警信息,当扫描到延迟报警后,会结合该实例的其他信息定位故障原因,然后自动调整集群数据库配置,达到降低延迟的目的。延迟报警解除后,恢复集群配置。
意义RDS-MySQL部分报警已经实现了“负载异常检测”、“自动诊断”、“线上配置优化”、“优化效果跟踪”的闭环处理。可帮助用户快速、安全、准确地处理集群数据安全隐患。
问题由于用户并发较大,集群从库出现延迟。
发现从库对于用户是不可见的,所以从库延迟用户是无需感知的。通过后台的监控系统,触发从库延迟报警,运维人员才发现这个问题。
解决后台任务会扫描所有报警信息,当扫描到延迟报警后,会结合该实例的其他信息定位故障原因,然后自动调整集群数据库配置,达到降低延迟的目的。延迟报警解除后,恢复集群配置。
意义RDS-MySQL部分报警已经实现了“负载异常检测”、“自动诊断”、“线上配置优化”、“优化效果跟踪”的闭环处理。可帮助用户快速、安全、准确地处理集群数据安全隐患。
问题由于用户并发较大,集群从库出现延迟。
发现从库对于用户是不可见的,所以从库延迟用户是无需感知的。通过后台的监控系统,触发从库延迟报警,运维人员才发现这个问题。
解决后台任务会扫描所有报警信息,当扫描到延迟报警后,会结合该实例的其他信息定位故障原因,然后自动调整集群数据库配置,达到降低延迟的目的。延迟报警解除后,恢复集群配置。
意义RDS-MySQL部分报警已经实现了“负载异常检测”、“自动诊断”、“线上配置优化”、“优化效果跟踪”的闭环处理。可帮助用户快速、安全、准确地处理集群数据安全隐患。

11246a99e5cf2d111a213f278de63f11.png
问题用户因为人为误操作,导致删除了线上系统的部分数据。
发现用户提工单,想快速恢复删除表的数据到指定时间点。
解决控制台提供单库、单表按时间点快速恢复的功能。技术服务人员直接反馈给用户该功能的使用文档。用户通过自助操作,完成对删除数据的恢复操作。
意义RDS-MySQL将备份和恢复功能用到极致,两类备份方式对应多种恢复流程,方便用户快速、安全地实现恢复数据库需求。RDS-MySQL恢复流程支持:1. 根据时间点创建2. 根据时间点单库、单表本地恢复3. 根据备份创建和本地覆盖恢复
问题用户因为人为误操作,导致删除了线上系统的部分数据。
发现用户提工单,想快速恢复删除表的数据到指定时间点。
解决控制台提供单库、单表按时间点快速恢复的功能。技术服务人员直接反馈给用户该功能的使用文档。用户通过自助操作,完成对删除数据的恢复操作。
意义RDS-MySQL将备份和恢复功能用到极致,两类备份方式对应多种恢复流程,方便用户快速、安全地实现恢复数据库需求。RDS-MySQL恢复流程支持:1. 根据时间点创建2. 根据时间点单库、单表本地恢复3. 根据备份创建和本地覆盖恢复
问题用户因为人为误操作,导致删除了线上系统的部分数据。
发现用户提工单,想快速恢复删除表的数据到指定时间点。
解决控制台提供单库、单表按时间点快速恢复的功能。技术服务人员直接反馈给用户该功能的使用文档。用户通过自助操作,完成对删除数据的恢复操作。
意义RDS-MySQL将备份和恢复功能用到极致,两类备份方式对应多种恢复流程,方便用户快速、安全地实现恢复数据库需求。RDS-MySQL恢复流程支持:1. 根据时间点创建2. 根据时间点单库、单表本地恢复3. 根据备份创建和本地覆盖恢复
问题用户因为人为误操作,导致删除了线上系统的部分数据。
发现用户提工单,想快速恢复删除表的数据到指定时间点。
解决控制台提供单库、单表按时间点快速恢复的功能。技术服务人员直接反馈给用户该功能的使用文档。用户通过自助操作,完成对删除数据的恢复操作。
意义RDS-MySQL将备份和恢复功能用到极致,两类备份方式对应多种恢复流程,方便用户快速、安全地实现恢复数据库需求。RDS-MySQL恢复流程支持:1. 根据时间点创建2. 根据时间点单库、单表本地恢复3. 根据备份创建和本地覆盖恢复
问题用户因为人为误操作,导致删除了线上系统的部分数据。
发现用户提工单,想快速恢复删除表的数据到指定时间点。
解决控制台提供单库、单表按时间点快速恢复的功能。技术服务人员直接反馈给用户该功能的使用文档。用户通过自助操作,完成对删除数据的恢复操作。
意义RDS-MySQL将备份和恢复功能用到极致,两类备份方式对应多种恢复流程,方便用户快速、安全地实现恢复数据库需求。RDS-MySQL恢复流程支持:1. 根据时间点创建2. 根据时间点单库、单表本地恢复3. 根据备份创建和本地覆盖恢复

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

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

相关文章

js和python哪个好_Python与Node.JS:哪一个比较适合您的项目?

在进行新项目时选择正确的编程语言可能是程序员经常做出的比较艰巨的决定之一。这个挑战背后的原因是,每个新项目都会遇到一个独特的问题,并且在编程世界中,没有任何行业的大师。 不同的编程语言都有其长处和短处,这使其适用于某些…

equation在c语言中是什么意思,MathType出现此对象创建于Equation中的问题怎么办

使用MathType出错的窗口:MathType程序停止工作提醒窗口:解决方法如下:1.打开Word文件,在Word菜单中选择“工具”——“模板和加载项”,将会跳出一个模板和加载项的对话框。在Word菜单中选择“工具”——“模板和加载项…

windows多用户 文件夹不共享_手把手教你如何使用Tekla多用户

Tekla有多用户模式,对于大模型需要多人合作很有用,可以多人同时建模互不干扰,下面简单说下多用户建立过程。 首先需要参与模型的计算机处于同一局域网内,一般来说公司都有局域网,或者办公室内就是一个小局域网&#xf…

hystrix原理_面试必问的SpringCloud实现原理图

引言面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。以下是《Java深入微服务原理改造房产销售平台…

android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

不解释了 直接上代码了main.xml布局文件,记住必须用RelativeLayout将ImageView重叠android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent" android:id"id/rl">android:…

c++ string类的常用方法_【常用类方法】Object

Object类的知识点总结概述:1. Object类是所有其他类的父类2. Object类只有一个构造方法,这也是为什么所有子类在调用构造方法时都会默认先调用父类的无参构造方法3. Object类没有成员变量方法:1. public int hashCode()2. public final Class…

python注释以符号什么开始_python注释以什么符号开始

python注释以什么符号开始,注释,中文,代码,批量,符号 python注释以什么符号开始 易采站长站,站长之家为您整理了python注释以什么符号开始的相关内容。 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也…

linux 别名,Linux中的别名就这么简单,如何使用和创建永久别名?

原标题:Linux中的别名就这么简单,如何使用和创建永久别名?输入文本和记命令是Linux命令行爱好者的缺点之一。如果你需要输入并记住同样长的命令,这可能会降低终端的工作效率。如果您可以用自己的短名称替换长命令,或者…

华为手机如何固定横屏_华为手机如何录屏?原来方法这么简单,手把手教你学会...

很多人都不知道,华为手机到底如何录屏,下面给大家分享4种方法,非常简单,手把手教你学会。一、通知栏录屏从手机顶端往下滑动打开通知栏,这个面板上有很多快捷功能,其中就有【屏幕录制】功能,点击…

程序发出的广播其他程序收不到_RabbitMQ 如何实现对同一个应用的多个节点进行广播...

1.背景了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改exchange上面,就会接收到所有的消息。使用…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现,目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制,以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是…

c++ 二维数组_【技术篇】C指针与二维数组深度辨析

一、源代码/*第01行*/ CLion 2019.3.4 x64中编写的源代码截图二、深度辨析CLion 2019.3.4 x64中编译的结果截图zippo[4][2]是一个四行二列的int型二维数组①不论一维数组还是二维数组,数组名就是指向数组首个元素的指针,也即数组名就是数组首个元素的…

shiro启动之后页面访问不了_java:shiro入门——4

【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候,会被【7.3】角色过滤使用“admin”用户登录,密码:123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后:此…

oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)

最近闲来无事,对部分大宗商品近十年的价格涨幅做了个统计,发现有些有意思的现象:大多资产价格走势如果放到一个足够长得时间维度里,那其实整体走势是比较一致的;有些资产价格走势高度相关,但是在某个时间段…

android左右耳机声音大小不一样,AirPods左右两边声音大小不同怎么办 单侧无声和两侧音量不同解决方法...

AirPods连接 iPhone 后如果出现了左右两边声音大小不一样,或者单侧无声的问题,可能是软件导致的暂时性故障,也有可能是硬件问题。当耳机音量出现异常时,可以通过以下几种方式尝试恢复。单侧无声和两侧音量不同解决方法&#xff1a…

laravel 任务队列_Laravel5.5之事件监听、任务调度、队列

流程:1.1 创建eventphp artisan make:event UserLoginLoginController.php/*** The user has been authenticated.** param IlluminateHttpRequest $request* param mixed $user* return mixed*/protected function authenticated(Request $request, $user){eve…

pytorch微调bert_小版BERT也能出奇迹:最火的预训练语言库探索小巧之路

选自Medium作者:Victor Sanh机器之心编译参与:魔王过去一段时间,大模型层出不穷。在大家纷纷感叹「大力出奇迹」的时候,作为调用预训练语言模型最流行的库,HuggingFace 尝试用更少的参数量、更少的训练资源实现同等的性…

if test 多条件_秒懂Python编程中的if __name__ == #39;main#39; 作用和原理

在大多数编排得好一点的脚本或者程序里面都有这段if __name__ main:1 这段代码的功能一个python的文件有两种使用的方法:第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if __name__ main: 的作用就是控制这两种情…

python背景颜色怎么随机_Python中的随机颜色

我同意TigerhawkT3(1)你教授对pick_color()的实现是垃圾。但我不认为random.choice(),或者你教授滥用random.shuffle()的方式是最好的选择。两者的问题是,在连续调用时可以获得相同的颜色,这是在正方形内绘制正方形时不…