• MySQL双日志redolog/binlog


    InnoDB引擎的redo log日志

    解决什么问题?

    我们每次更新数据如果都要直接写到硬盘存储的话,如果更新数据频繁的话,整个过程的Io成本和查找成本都会很高(比方说每次启动磁盘,平均的寻找数据时间将会很长)

    怎么解决?

    引入了redo log,redo就相当于一个缓存,它的关键点就是先写日志,在写到磁盘,这样的效率就会大大提高,如果更新频繁的话,先把这些更新的数据写到redo,当空闲下来在写到硬盘中去。

    redo文件

    作用

    redo log是物理日志,记录的是在某个数据页上做了什么修改

    大小有限

    redo的文件大小是有限的,如何保持有限的内存,对付可能无限的更新操作,它会把写入硬盘的数据擦除,这样就可以循环使用了。

    原理

    内部类似一个双指针,一个指针记录,更新的操作,一个指针记录擦除的位置,两个指针之间的部分,就是还剩余的部分。

    可能出现的问题

    1.但是要是更新指针追上了擦除指针会发生什么?

    这个时候更新操作就会停止,先去执行擦除操作,让剩余空间出现

    2.异常重启

    如果数据库异常重启了,redo就会刷新到硬盘,之前的提交记录没有丢失,这个能力称为crash-safe

    MySQL的binlog

    MySQL的sever层也有自己的日常binlog(归档日志)

    作用

    首先它是server层特有的,所以不管你用了什么引擎,这个日志都是存在的

    binlog是逻辑日志,记录的是这个语句的原始逻辑,比方说在zx表中给id为2的,age+1,所有的更新操作都会在这个日志中找到。

    备份恢复的 时候,就是以binlog为基础

    两种模式

    Binlog有两种模式,statement 格式的话是记sql语句, row格式会记录行的内容,记两条,更新前和更新后都有。

    由于有两个日志,那么保持如何保持一致性呢?

    两阶段提交

    就是类似事务的方式,要么都成功要么都失败

  • 相关阅读:
    显示AVI的第一桢
    视频采集,存成avi
    视频捕获
    如何将Wav文件做到EXE文件里
    图形整体拉出效果
    3.2 指数型生成函数
    3.1 普通型生成函数
    诡异的楼梯 HDU
    A strange lift HDU
    胜利大逃亡 HDU
  • 原文地址:https://www.cnblogs.com/chendezhen/p/16016917.html
Copyright © 2020-2023  润新知