MySQL Redo Log 与 BinLog
Redo Log
这个日志可以提高数据库的性能,是 InnoDB 引擎特有的日志,用于记录物理日志,比如数据页上做了什么修改,以及保存事务的提交过程;
该日志文件大小固定,文件写完就会从头开始覆盖,既然会覆盖,那就说明这个日志是不能用于回滚的;
若数据库重启,或者因为异常宕机重启后,Redo Log 可以保证之前提交的事务不会丢失,这种能力叫做 crash-safe ;
BinLog
这个日志是 MySQL Server 的日志,也就是说所有数据库引擎都可以使用这种日志,记录的是数据库的所有增删查改操作;
日志文件是追加模式写入的,并没有大小限制,不会覆盖之前的数据,可以用于恢复数据库中的数据;
如果数据库出现误删或者需要恢复数据库到某一时刻,那就需要该日志中的记录进行恢复;
日志写入过程
当一条数据库操作命令进入 MySQL Server 和存储引擎时,会执行以下几个操作(用更新命令进行解释):
1 | UPDATE Table |
- 执行器会先去缓存中寻找符合条件的数据,如果缓存中没有找到,就去存储引擎中找数据;
- 存储引擎将数据返回给执行器,执行器更新操作得到一个新值,并调用引擎接口把数据发到存储引擎中;
- 引擎会将新数据记录到缓存中,并将操作写入 Redo Log,日志写入完成后,Redo Log 处于 prepare 预备状态,然后告知执行器写入数据完成,等待提交事务;
- 执行器将操作写入 BinLog 并落盘;
- 执行器调用引擎接口修改 Redo Log 状态为 commit 提交状态,数据更新完成;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tianyi's Blog!
评论