mysql 的三大日志

本贴最后更新于 1499 天前,其中的信息可能已经事过景迁

binlog

  • 存储着每条变更的 SQL 语句(update/delete/insert/truncate/create)
  • 主从结构复制数据
  • 恢复数据

redo log

当 mysql 在执行 update user set age = 18 where name ='小白' 时,会首先根据 小白 去找到页,让好找到数据,把数据加载到内存中

接着在内存中把改行数据的 age 改为 18,接着刷入磁盘

但是如果此时数据库突然挂了,那么这个修改就丢失了

所以在真实的情况时,把数据在内存中修改后先写入到 redo log 文件中,然后在把数据保存在页中,这样就算数据库突然挂了,下一次重启时可以根据 redo log 恢复操作

  • redo log 是顺序写入的,所以写入的速度很快
  • 并且 redo log 不能用于来恢复全部的数据,因为当某一次操作时将内存的数据成功刷入到页中写入磁盘,那么与之对应的 redo log 就无用了 相当于是一次性的

binlog 和 redo log 的区别

  • binlog
    • 记录的是 sql 语句,可以说是记录逻辑变化
    • 事务提交的时候才产生
  • redo log
    • 记录的是数据的物理变化,某个值由 xx 变为了 yy
    • 事务开始的时候产生
  • 可以说是先写 redo log 然后再写 binlog,只有当两者都成功这次事务才算完成

undo log

  • 作用
    • 回滚
    • 多版本控制
  • undo log 会反向记录当前操作的 sql,比如 insert 数据时,会记录 delet

参考

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...