美文网首页基础原理
Mysql的bin log,redo log,undo log

Mysql的bin log,redo log,undo log

作者: 大帅流皮阿 | 来源:发表于2019-06-20 15:39 被阅读36次
    1. binlog是MySQL Server层记录的日志, redo log是InnoDB存储引擎层的日志。
      两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。
    2. 选择binlog日志作为replication我想主要原因是MySQL的特点就是支持多存储引擎,
      为了兼容绝大部分引擎来支持复制这个特性,那么自然要采用MySQL Server自己记录的日志而不是仅仅针对InnoDB的redo log,
      因为如果采用了InnoDB redo log复制,那么其他引擎也想复制,此时改怎么办呢?对吧

    binlog属于逻辑日志,是逻辑操作。innodb redo属于物理日志,是物理变更。
    逻辑日志有个缺点是难以并行,而物理日志可以比较好的并行操作,所以redo复制还是有优势的,也许5.7能搞出来。

    什么是binlog

    binlog日志用于记录所有更新且提交了数据或者已经潜在更新提交了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。

    binlog作用

    1.恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新。
    2.在主复制服务器上记录所有将发送给从服务器的语句。

    binlog 主要参数

    log_bin
    设置此参数表示启用binlog功能,并指定路径名称

    Undo Log

    Undo Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用UndoLog来实现多版本并发控制(简称:MVCC)。
    -事务的原子性(Atomicity)
    事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。

    -原理
    Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为UndoLo)。
    然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用UndoLog中的备份将数据恢复到事务开始之前的状态。
    除了可以保证事务的原子性,Undo Log也可以用来辅助完成事务的持久化。

    -事务的持久性(Durability)
    事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中。为了保证持久性,数据库系统会将修改后的数据完全的记录到持久的存储上。

    缺陷:每个事务提交前将数据和Undo Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。
    如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一种机制来实现持久化,即

    Redo log
    记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,
    但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态。

    -Undo+Redo
    事务的特点
    A.为了保证持久性,必须在事务提交前将
    RedoLog持久化。
    B.数据不需要在事务提交前写入磁盘,而是缓存在内存中。
    C.RedoLog保证事务的持久性。
    D.UndoLog保证事务的原子性。
    E.有一个隐含的特点,数据必须要晚于redolog写入持久存

    相关文章

      网友评论

        本文标题:Mysql的bin log,redo log,undo log

        本文链接:https://www.haomeiwen.com/subject/sahjqctx.html