日志系统(2)_日志文件系统

日志系统(2)_日志文件系统:重做日志。每当有操作时,在数据变更之前将操作写入 ,这样当发生掉电之类的情况时系统可以在重启后继续操作 :称为撤销日志,当一些变更执行到一半无法完成时,可以根据撤销日志恢复到变更之间的状态。 位于存

日志系统(2)

redo log

redo log:重做日志。每当有操作时,在数据变更之前将操作写入redo log,这样当发生掉电之类的情况时系统可以在重启后继续操作
undo log:称为撤销日志,当一些变更执行到一半无法完成时,可以根据撤销日志恢复到变更之间的状态。

redo log位于存储引擎层,InnoDB中有使用。InnoDBredo log是固定大小,比如配置一组4个文件,每个文件的大小为1G,那么总共可以记录4GB的操作。从头开始写,写到末尾就又回到开头循环写。

  • write pos:当前记录的位置,一边写一边后移
  • checkpoint:当前要擦除的位置,是往后推移并且循环的,擦出记录前要把记录更新到数据文件

write poscheckpoint之前是日志还空着的部分,可以用来记录新的操作。如果write pos追上checkpoint,表示日志满了,这时候不能再执行新的更新,得停下来先擦掉一些记录。

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

WALWrite-Ahead Loggin,预写日志系统。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统状态中。通常包含redo和undo两部分信息。
具体来说,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是系统比较空闲的时候做。

binlog

归档日志,位于Server层。

为什么会有两份日志?
最开始MySQL里并没有InnoDB引擎。MySQL自带的引擎是MyISAM,但是MyISAM没有crash-safe的能力,binlog日志只能用于归档。而InnoDB是另一个公司以插件形式引入MySQL的,既然只依靠binlog是没有crash-safe能力的,所以InnoDB使用另一套日志系统也就是redo log来实现crash-safe能力。

redo log差别:

  1. redo logInnoDB引擎特有的,binlog是MySQL的Server层实现的,所有引擎都可以使用。
  2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1”。
  3. redo log是循环写的,空间固定会用完,binlog是可以追加写入的,指的是写到一定大小后会切换到下一个,并不会覆盖以前的日志。

误删表后的操作:

  1. 找到最近一次的全量备份,从这个备份恢复到临时库
  2. 从备份的时间点开始,将备份的binlog依次取出来,重放到删除误删除的时刻

MySQLbinlog日志可以用于误操作后的数据恢复工作以及主从复制一致性的工作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9286.html

(0)
上一篇 2023-02-11
下一篇 2023-02-11

相关推荐

  • [20211217]滑稽可笑的程序代码2.txt

    [20211217]滑稽可笑的程序代码2.txt[20211217]滑稽可笑的程序代码2.txt–//实在不知道如何取标题..感觉很无奈无语…–//昨天上午快下班的时候我使用ashtop看等待事件,无意中发现生产系统的一条sql语句执行时间

    2023-05-03
    137
  • JavaWeb 07_创建web项目连接MySQL实现注册登录功能

    JavaWeb 07_创建web项目连接MySQL实现注册登录功能一、创建一个web项目,参照JW/01_创建web项目及部署 二、在NAVICat 里建数据库 db_01,建表tb_user ,字段UName 、Pwd 三、在web下创建一个Directory,

    2023-05-09
    157
  • 以Python write函数为中心的原始标题

    以Python write函数为中心的原始标题Python是一门高级编程语言,它在编写简单的脚本程序和复杂的桌面应用程序方面都非常方便。如果你正在使用Python编写文件操作或数据存储的代码,那么你一定会用到Python中强大而又常用的write()函数。因此,本文将以Python write函数为中心,详细讲解它的用法和应用场景,希望能够帮助你写出更加高效的Python代码。

    2024-04-29
    78
  • 用Python编程快速优化您的生产效率

    用Python编程快速优化您的生产效率在日常工作中,您是否曾经遇到过以下问题:

    2024-03-16
    87
  • swoole 连接池_swoole redis

    swoole 连接池_swoole redis一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机。 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000…

    2023-02-12
    145
  • MongoDB入门基本操作命令[通俗易懂]

    MongoDB入门基本操作命令[通俗易懂]MongoDB入门 一. 基础概念 在mongodb中是通过数据库、集合、文档的方式来管理数据,下边是mongodb与关系数据库的一些概念对比: SQL术语/概念 MongoDB术语/概念 解释/说…

    2023-03-11
    163
  • MySQL定时备份(全量备份+增量备份)[亲测有效]

    MySQL定时备份(全量备份+增量备份)[亲测有效]MySQL 定时备份 参考 zone7_ 的 实战-MySQL定时备份系列文章 参考 zmcyu 的 mysql数据库的完整备份、差异备份、增量备份 更多binlog的学习参考马丁传奇的 MySQL…

    2023-02-01
    149
  • InnoDB基础[亲测有效]

    InnoDB基础[亲测有效]在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用局部性原理加载。 一、局部性原理 从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中

    2023-02-11
    151

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注