mysql 的日志系统
-
mysql 中有两种重要的日志
-
redolog
-
innodb引擎提供
-
逻辑日志,记录对数据的操作,必须id=2这行+1
-
redolog 日志解决了什么问题?
-
我们都直到频繁写磁盘 效率是非常低的,所以mysql设计时就通过日志的方式来解决这个问题
-
mysql 在对表做更新操作时,会先记录一个redo log日志,innodb等空闲时间再去写入磁盘,这个操作也被称为WAL(write-Ahead-Loggin)
-
redolog 是固定大小的,从头开始写,写到末尾又回到开头循环写
-
redolog 之后记录未刷盘的日志
-
有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。
-
binlog
-
binlog 由mysql server 提供
-
物理日志记录在数据页上做的修改 binlog 不会覆盖之前的日志
-
看到这里你可能会问 为什么binlog 不支持crash-safe ?
-
前面说了 binlog 记录的全量日志,记录所有的操作redolog记录的时未刷盘操作
-
当数据库宕机恢复后 binlog无法知道数据库是从什么宕机的 无法精确恢复
-
而redolog 只需要刷盘之后就可以恢复数据
-
两阶段提交
-
保证binlog 和 redolog 都被写入