头图

本次介绍,MySQL三个重要的日志,binlog、redolog和undolog。

  1. binlog日志
    binlog也称二进制日志,记录了对MySQL数据库执行更改的所有操作,但是不包括select和show这类操作。
    1.1 基本概念

binlog是MySQL的Server层实现的,所有引擎都可以使用。
binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”
binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

1.2 主要作用

恢复:数据恢复需要二进制日志
复制:通过复制和执行binlog日志使一台远程的MySQL数据库(slave)与一台MySQL数据库(master)进行实时同步
审计:可以通过查看该日志,判断是否由对数据库进行注入攻击。

1.3 应用
binlog 会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有 binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。
当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做:

首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;
然后,从备份的时间点开始,将备份的binlog依次取出来,重放到中午误删表之前的那个时刻。

这样你的临时库就跟误删之前的线上库一样了,然后你可以把表数据从临时库取出来,按需要恢复到线上库去。
1.4 重要参数设置
sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参建议设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。

  1. redolog
    redolog称为重做日志,用来保证事务的原子性和持久性。
    2.1 基本概念
    当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

redo log是固定大小的
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”
redo log 是循环写的,空间固定会用完
redo log 是 InnoDB 引擎特有的

2.2 主要作用
有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。
保证事务的原子性以及持久性。
2.3 两阶段提交
从上边的介绍中可以看到,redo log和bin log是两个独立的逻辑,所以不妨想想如果不使用两阶段提交,会发生什么呢?
无外乎就是先写完redolog 再写binlog,或者反过来。

先写redolog后写binlog。假设写完redolog之后,还没来得及写binlog,MySQL进程异常重启。由于之前说过,redolog写完之后,即便系统崩溃,仍然能够把数据恢复过来,但是由于binlog没写完就crash了,那么在做系统备份或者主从同步的时候,由于binlog中的内容和redolog中的内容不一致,就会导致主从不同步。
先写binlog后写redolog。如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以,在之后用 binlog 来恢复的时候就多了一个事务出来,与原库的值不同。

可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。
2.4 重要参数
redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数建议设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。

  1. undolog
    undolog帮助事务进行回滚操作。
    3.1 基本概念
    在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。

逻辑日志
undo log是采用段(segment)的方式来记录的,每个undo操作在记录的时候占用一个undo log segment
会产生redolog,因为undolog也需要持久化

3.2 主要作用
事务回滚以及MVCC的实现。


运维社
12 声望4 粉丝

« 上一篇
反转单链表