Notes about MySQL Log

几种常用的log

binlog

归档日志(二进制日志)在MySql Server上进行(因为主从复制mysql支持多种引擎,所以和redo log分开)

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

  • 内容:逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句; 但又不完全是sql语句这么简单,而是包括了执行的sql语句(增删改)反向的信息,也就意味着delete对应着delete本身和其反向的insert; update对应着update执行前后的版本的信息;insert对应着delete和insert本身的信息。

binlog 有三种模式: Statement(基于 SQL 语句的复制)、Row(基于行的复制) 以及 Mixed(混合模式)

redo log

重做日志, 在MySQL引擎上,即我们常说的WAL设计

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

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

设计

是一个环状链表

undo log

回滚日志

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

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


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!