MySQL是如何做到可以恢复到半个月内任意一秒的状态的?

news2024/9/23 1:24:28

图片

MySQL的逻辑架构图

MySQL中两个重要的日志模块:redo log(重做日志)和binlog(归档日志)

我们先来看redo log:

介绍一个MySQL里经常说到的WAL技术,即Write-Ahead-Logging,它的关键点就是先写日志,再写磁盘。具体来说,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了,同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做的。

InnoDB的redo log是固定大小的,比如可以配置为一组4个文件,每个文件在大小是1GB,总共就可以记录4GB的操作。从头开始写,写到末尾就又回到开头循环写,如下面所示

图片

write pos是当前记录的位置,一边写一边后移,写到第3号文件末尾就回到0号文件开头。checkpoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。write pos和checkpoint之间是还空着的部分,可以用户来记录新的操作。如果write pos追上checkpoint,就表示满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint推进一下。

有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。

再来看下binlog:

MySQL整体来看,其实就两块:一块是Server层,它主要做的是MySQL功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。redo log是InnoDB引擎特有的日志,而Server层也有自己的日志,称为binlog。

redo log和binlog的不同点有三个:

1)redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用;

2)redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1”;

3)redo log是循环写的,空间固定,会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

一个update语句的执行流程,如下图所示

图片

再介绍一下两阶段提交(指的是redo log的prepare和commit两个阶段)

为什么需要“两阶段提交”呢,这是为了让两份日志之间的逻辑一致。如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。简单说,redo log和binlog都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。

现在来回答标题中的问题:MySQL是如何做到可以恢复到半个月内任意一秒的状态的?这里需要有两个前提,即开启了定期整库备份和开启了binlog记录。恢复时的操作步骤如下:

1)首先,找到最近一次的全量备份,将这个备份恢复到临时库;

2)然后,从备份的时间点开始,将备份的binlog依次取出来,重放到我们期望的那个时刻。

binlog还有一种用途:当需要扩容的时候,也就是需要再多搭建一些备库来增加系统的读能力的时候,现在常见的做法也是用全量备份加上应用binlog来实现的。

注:

1)为了保证MySQL异常重启之后redo log的数据不丢失,强烈建议将innodb_flush_log_at_trx_commit这个参数设置成1,表示每次事务的redo log都直接持久化到磁盘;

2)为了保证MySQL异常重启之后binlog的数据不丢失,强烈建议将sync_binlog这个参数设置成1,表示每次事务的binlog都持久化到磁盘。

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

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

相关文章

中国计算机学会推荐国际学术会议及时间(计算机体系结构/高性能计算/存储系统)

中国计算机学会推荐国际学术会议及时间 (计算机体系结构/高性能计算/存储系统) 参考资料 参考链接: call4papers

npm、pnpm和yarn 的区别

包管理工具是JavaScript开发中不可或缺的一部分,它们可以帮助我们方便地安装、更新、删除和管理项目所依赖的各种库和模块。 目前,最流行的包管理工具有npm、yarn和pnpm,它们各有各的特点和优劣势。 本文将试着对这三个工具进行全面的对比。…

新电脑究竟要不要登录微软账户?看这个就明白了

记得Windows11出来之后,新电脑预装的系统开机之后就会强制用户登录微软账户,不然就没法进入下一步。 如果你在重装了Windows10系统之后,到了联网步骤时连接上了网络,那么也会强制你登录微软账户,而不是创建本地账户&am…

Spring Data JPA从入门到精通--对查询结果的扩展

如果 我们想仅仅返回实体中的几个字段,应该怎么做呢? 基于projections的思路,其实是比较容易的。 我们只需要声明一个 接口,包含要返回的属性的方法即可,例如: Repository里面的写法如下,直接…

面向对象编程(高级)

面向对象编程(高级) 1、类变量和类方法 (1) 概念 类变量,也称为静态变量,是指在类级别声明的变量。它们与特定类相关联,而不是与类的实例(对象)相关联。每个类变量只有…

jmeter的安装与目录介绍

1、启动 apache-jmeter-5.0\bin 2、永久修改中文配置 zh-CN就行了

Docker与虚拟机的比对

在Windows操作系统上的对比: 但是官方还是建议我们尽量不要将Docker直接安装到Windows操作系统上。

单机多进程,每个进程多张卡 mpi nccl 程序设计检验

做了部分注释&#xff0c;比较乱 本示例结构&#xff1a; 1&#xff0c;源代码 #include <stdlib.h> #include <stdio.h> #include "cuda_runtime.h" #include "nccl.h" #include "mpi.h" #include <unistd.h> #include <…

MySQL的基础架构之内部执行过程

MySQL的逻辑架构图 如上图所示&#xff0c;MySQL可以分为Server层和存储引擎层两部分&#xff1a; 1&#xff09;Server层涵盖了MySQL的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#xff0c;所有跨存储引擎…

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作 学习完mybatis入门后&#xff0c;我们继续学习mybatis基础操作。 1.1 需求 需求说明 通过分析以上的页面原型和需求&#xff0c;我们确定了功能列表&#xff1a; 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除 …

腾讯云轻量应用服务器详细介绍_2024年更新

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

数据库应用课程学生表、课程表、选课表mysql语句实战练习

1、创建表结构 目录 1、创建表结构 1.1 创建学生表 1.2 创建课程表 1.3创建选课表 1.4 插入学生表 1.5 插入课程表 1.6 插入选课表 2.以下布置操作是根据以上建立的三张表格基础上进行mysql语句的练习 2.1 查询学生信息并添加入新表 2.1.1 查询全体学生的学号与姓名&#…

ECharts配置个性化图表:圆环、立体柱状图

官网调试地址&#xff1a;调试 效果图&#xff1a; 配置&#xff1a; option {color: [#29BEFF, #A2DC00, #FFC400, #FF7F5C, #CA99FC],// 提示窗tooltip: {trigger: item,show: false},// 图例legend: {top: 5%,left: center,show: false},// 数据series: [{name: Access …

23年中科院1区算法|开普勒优化算法原理及其利用(Matlab/Python)

CEC2017中的测试 本文作者将介绍一个2023年发表在中科院1区期刊《Knowledge -Based Systems》上的优化算法——开普勒优化算法(Kepler optimization algorithm&#xff0c;KOA)[1] 算法性能上&#xff0c;与鹈鹕、黏菌、灰狼和鲸鱼等一众优化算法在CEC2014、CEC2017、CEC2020和…

SRC中的一些信息收集姿势

目录 前言 搜索引擎 Google、bing、baidu Fofa、360q、鹰图 提炼图标 提炼标题 提炼Body 提炼特殊路由 提炼特殊服务 GIT提炼 总结 本文由掌控安全学院 - 杳若 投稿 前言 前前后后挖了四个月的EDUSRC&#xff0c;顺利从路人甲升到了网络安全专家&#xff0c;从提交…

技术扫盲:如何优雅的使用 java -jar

java -jar xxx.jar java -jar 是一个用于在命令行界面中执行 Java 可执行 JAR 文件的命令。它的语法如下&#xff1a; java -jar <JAR 文件路径> [参数]其中&#xff1a; java 是 Java 运行时环境的可执行文件。-jar 是一个选项&#xff0c;表示要执行的文件是一个 JA…

南昌本地人才招聘网站有哪些

南昌吉鹿力招聘网是一家南昌本地人才招聘网站&#xff0c;真正专属于年轻人的移动社交招聘平台&#xff0c;提供职业档案、人脉、求职、聊天等功能。主要优点是扩大招聘渠道&#xff0c;通过社区招聘平台找到工作机会&#xff0c;并为用户提供职业建议和职位发布等服务。 吉鹿…

技术资讯:Vue 3.4 新版本发布,1分钟快速看看改了啥!

大家好&#xff0c;我是大澈&#xff01; 本文约1000字&#xff0c;整篇阅读大约需要1分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff01…

【办公软件】修改U盘的默认盘符

在工作中我们可能会因为有一些大型软件设置了库文件路径&#xff08;如Z盘&#xff09;。在家办公时通过U盘的方式将库拷入在U盘中&#xff0c;但是到家里的电脑上&#xff0c;U盘插入后会默认一个盘符&#xff08;如E盘&#xff09;&#xff0c;那么应该怎么操作呢&#xff1f…

【HBase】——安装部署

1 规划&前提 Zookeeper 、HDFS 正常部署规划如下 2 解压并重命名 cd /opt/software/ tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/module/ cd /opt/module mv hbase-2.4.11/ hbase3 修改配置文件 3.1 hbase-env.sh #!/usr/bin/env bash # #/** # * Licensed to the Apa…