(编辑:jimmy 日期: 2024/12/25 浏览:2)
数据库中用于存储数据的文件称为data file,日志文件称为log file。此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓存log buffer。
当我们执行一条更新语句时,比如 update table set c=c+1 where id = 2,执行顺序如下:
补充:MySQL的基本存储结构是页(记录都存在页里边),所以MySQL是先把这条记录所在的页找到,然后把该页加载到内存中,再修改对应的记录。
bin log称为归档日志、二进制日志,属于MySQL Server层面的,用于记录数据库表结构和表数据的变更,可以简单理解为存储每条变更的sql语句,比如insert、delete、update(当然,不仅是sql,还有事务id,执行时间等等)。
事务提交的时候,一次性将事务中的sql语句按照一定格式记录到bin log
主要有两个作用:主从复制和恢复数据
区分innodb_flush_log_at_trx_commit和sync_binlog
看了以上的介绍,感觉bin log和redo log很像,都是记录数据变更,可用于恢复。其实,它们还是有明显区别的。
如果整个数据库被删除,可以通过redo log恢复吗?
不行!因为redo log侧重点是保存某次事务的数据变更,当内存中的数据刷到磁盘后,redo log的数据其实已经没有参考价值。此外,redo log会覆盖历史数据,也不可能通过它来恢复所有数据。
详细分析MySQL事务日志
undo log称为回滚日志,属于InnoDB存储引擎层,是逻辑日志,记录每行数据。当我们变更数据时,就会产生undo log,可以认为insert一条数据,undo log会记录一条对应的delete日志,反之亦然。
在事务开始前,将当前版本生成undo log
主要作用:提供回滚和多版本并发控制(MVCC)
以上就是MySQL 日志相关知识总结的详细内容,更多关于MySQL 日志的资料请关注其它相关文章!