数据库中用于存储数据的文件称为data file,日志文件称为log file。此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓存log buffer。
sql执行顺序
当我们执行一条更新语句时,比如 update table set c=c+1 where id = 2,执行顺序如下:
- 执行器通过存储引擎获取id=2的行记录。如果id=2的行记录所在的数据页已经在内存中,则直接返回;否则,需要从磁盘读取数据
- 执行器拿到返回的行数据,把字段c的值+1,得到新的行数据,然后调用存储引擎接口写入行数据
- 引擎把这行数据更新到内存,同时将这个更新操作记录到redo log里面,此时redo log处于prepare状态。然后告诉执行器执行完成,随时可以提交事务
- 执行器生成这个操作的bin log,并把bin log写入磁盘
- 执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log改成commit状态,更新完成
补充:MySQL的基本存储结构是页(记录都存在页里边),所以MySQL是先把这条记录所在的页找到,然后把该页加载到内存中,再修改对应的记录。
bin log
是什么
bin log称为归档日志、二进制日志,属于MySQL Server层面的,用于记录数据库表结构和表数据的变更,可以简单理解为存储每条变更的sql语句,比如insert、delete、update(当然,不仅是sql,还有事务id,执行时间等等)。
什么时候产生
事务提交的时候,一次性将事务中的sql语句按照一定格式记录到bin log
有什么用
主要有两个作用:主从复制和恢复数据
- 目前大部分数据库架构都是一主多从,从服务器通过访问主服务器的bin log,保证数据一致性
- bin log记录数据库的变更,可以通过它恢复数据
什么时候落盘
区分innodb_flush_log_at_trx_commit和sync_binlog
bin log VS redo log
看了以上的介绍,感觉bin log和redo log很像,都是记录数据变更,可用于恢复。其实,它们还是有明显区别的。
- bin log属于MySQL Server层面的,redo log属于InnoDB存储引擎层面
- bin log是逻辑日志,记录的是sql语句的原始逻辑;redo log是物理日志,记录的是物理页面更新的内容
- bin log是追加写,文件达到限制后会更换下个文件,不会覆盖;redo log是循环写,文件大小固定,写满就重头开始写,覆盖原来的内容
- bin log作用是主从复制和恢复数据,当数据库被删除、或者从库同步主库数据时,由于bin log记录变更数据的sql,所以可通过bin log恢复。而redo log作用是持久化,当发生服务器宕机或者掉电等情况,数据丢失,可以通过redo log恢复。
- bin log是提交事务时才写入磁盘,而redo log在开启事务时,就开始写入到磁盘
如果整个数据库被删除,可以通过redo log恢复吗?
不行!因为redo log侧重点是保存某次事务的数据变更,当内存中的数据刷到磁盘后,redo log的数据其实已经没有参考价值。此外,redo log会覆盖历史数据,也不可能通过它来恢复所有数据。
undo log
详细分析MySQL事务日志
是什么
undo log称为回滚日志,属于InnoDB存储引擎层,是逻辑日志,记录每行数据。当我们变更数据时,就会产生undo log,可以认为insert一条数据,undo log会记录一条对应的delete日志,反之亦然。
什么时候产生
在事务开始前,将当前版本生成undo log
有什么用
主要作用:提供回滚和多版本并发控制(MVCC)
- 回滚:当需要rollback时,从undo log的逻辑记录读取相应的内容进行回滚
- MVCC:undo log记录中存储的是旧版本数据,当一个事务需要读取数据时,会顺着undo链找到满足其可见性的记录
以上就是MySQL 日志相关知识总结的详细内容,更多关于MySQL 日志的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- Blast Slam S1参赛名单出炉:XG被直邀
- 《英雄联盟》Doinb想让Tian当教练:世纪大和解?
- 《忆蚀》Subliminal:揭秘后室之谜,路知行献声Weplay文化展
- 那英《征服NEWXRCD台湾版》日本压制[WAV+CUE]
- 群星《金曲百分百上》3CD(香港版)[WAV+CUE]
- 刘欢《雨中的树(新歌加精选)2CD》德国HD24K金碟[WAV+CUE]
- 郑源 《世间情歌》6N纯银SQCD[WAV+CUE][1G]
- 群星《粤潮2HQII》头版限量编号[低速原抓WAV+CUE][991M]
- 群星《2023好听新歌21》十倍音质 U盘音乐[WAV分轨][1G]
- 《热血传奇》双11感恩回馈 超值狂欢30天
- 原神5.2版本活动汇总 5.2版本活动有哪些
- 张敬轩.2010-NO.ELEVEN【环球】【WAV+CUE】
- 黄丽玲.2006-失恋无罪【艾回】【WAV+CUE】
- 阿达娃.2024-Laluna【W8VES】【FLAC分轨】
- 宝可梦大集结段位等级划分表大全 大集结段位一览