腾讯面试题:数据库中的日志你都了解哪些呢?说一说他们之间的作用与应用(看完你就能和面试官笑谈人生了)
数据库中的日志你都了解什么?请说一下他们之间的作用以及应用(redo log, bin log, undo log)
redo log(重做日志):
当有一条记录需要更新,InnoDB 引擎就会把记录写到 redo log 里面,并更新内存。这个时间更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面。有了 redo log,InnoDB 就可以保证即使库发生异常重启,之前提交的记录都不会丢失,这个能力成为 crash safe。redo log是指回放日志的时候把commit的事务重做一遍,对于没有commit的事务按照abort 处理,不进行任何操作。
bin log(归档日志):
bin log日志只能用于归档,没有 crash safe 能力。
这两种日志之间的区别:
① redo log 是InnoDB引擎持有的;bin log是MySQL的server 层实现的,所有的引擎都可以使用。
② redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;bin log是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID = 2这一行的 c 字段加1”。
③ redo log 是循环写的,空间固定会用完;bin log是可以追加写的。“追加写”是指bin log 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
undo log(回滚日志):
undo log 是把所有没有commit的事务回滚到事务开始前的状态,系统崩溃时,可能有些事务还没有commit,在系统恢复时,这些没有commit的事务就需要借助 undo log 来进行回滚。
- 本文作者: feng之锋
- 本文链接: http://example.com/2021/03/21/腾讯面试题:数据库中的日志你都了解什么?说一说他们之间的作用与应用/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
