zoukankan      html  css  js  c++  java
  • MySQL 日志

    MySql 中有六种日志文件:重做日志(redo log),回滚日志(undo log),二进制日志(bin log),错误日志(errlog),慢查询日志(slow query log),一般查询日志(general log),中继日志(relay log)。

    这其中重做日志和回滚日志与事务操作息息相关,二进制日志与事务操作有一定关系,这篇文章我们来看看这三种日志能做什么。

    重做日志(redo log)

    作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,重启 mysql 服务的时候,会根据 redo log进行重做,从而达到事务的持久性这一特性。

    内容:物理格式的日志,记录的是物理数据页面的修改信息,其 redo log 是顺序写入 redo log file 的物理文件中去的。

    产生时间:事务开始后就产生了 redo log。在事务执行的过程中,便开始写入 redo log 文件中。

    释放:当对应事务的脏页写入到磁盘之后,redo log 的使命也就完成了。

    回滚日志(undo log)

    作用:保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC)。

    内容:逻辑格式的日志,在执行 undo 的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现。

    产生时间:事务开始之前,将当前版本生成 undo log,undo 也会产生 redo 来保证 undo 的可靠性。

    释放:当事务提交后,undo log 并不能立马被删除,而是放入待清理的链表。

    二进制日志(binlog)

    作用:用于主从复置,从库利用主库上的 binlog 进行重播,实现主从同步。还可以用于数据库基于时间点的还原。

    内容:逻辑格式的日志,可以简单认为就是执行过的事务中的 sql 语句。但又不完全是 sql 语句那么简单,而是包括了执行 sql 语句反向的信息,比如 delete 对应着其反向的 insert 等。

    产生时间:事务提交的时候,一次性将事务中的 sql 语句按照一定格式记录到 binlog。在开启了 binlog 的情况下,对于大事务的提交,可能会变得比较慢一些,这是因为 binlog 会在事务提交的时候一次性写入造成的。

    补充

    二进制日志的作用之一是还原数据库的,与 redo log 很类似。

    1. 作用不同:redo log 是保证事务持久性的,是事务层面的,binlog 作为还原的功能,是数据库层面的,虽然都有还原的意思,但是其保护的数据的层次是不一样的。
    2. 内容不同:redo log 是物理日志,是数据页面修改之后的物理记录,binlog 是逻辑日志,可以简单理解为就是 sql 语句。
    3. 恢复数据时的效率,基于物理日志的 redo log 恢复数据的效率要高于逻辑日志的 binlog。
    4. MySql 时通过两阶段提交来保证事务一致性的,也就是 redo log 和 binlog 的一致性,理论上是先写 redo log,再写 binlog,两个日志都写入成功(刷入磁盘),事务才算真正的完成。
  • 相关阅读:
    Linux下Mysql自启动
    C++的Vector用法
    如何判断一个文本文件内容的编码格式 UTF-8 ? ANSI(GBK)
    windows自带记事本导致文本文件(UTF-8编码)开头三个字符乱码问题
    C/C++字符串查找函数
    C++ string 字符串查找匹配
    CentOS6.5升级autoconf版本 Autoconf version 2.64 or higher is required
    Linux命令之远程下载命令:wget
    Linux常用命令大全
    如何使用VisualStudio2013编写和调试c语言程序
  • 原文地址:https://www.cnblogs.com/paulwang92115/p/12274602.html
Copyright © 2011-2022 走看看