兰州金建工程建设监理网站,网站管理的主要内容,建站大师,百度推广app下载安卓版1.mysql三种重要日志
redo log#xff08;重做日志#xff09;#xff1a;存在于引擎层#xff0c;物理存储#xff0c;通过设置innodb_flush_log_at_trx_xommit1 让其持久化到磁盘#xff0c;保证引擎的crash-safe能力#xff0c;遵从WAL技术#xff08;Write-Ahead …1.mysql三种重要日志
redo log重做日志存在于引擎层物理存储通过设置innodb_flush_log_at_trx_xommit1 让其持久化到磁盘保证引擎的crash-safe能力遵从WAL技术Write-Ahead Logging存放方式为指定大小循环存储存储时通过写指针write pos和擦拭指针check point来控制存放内容为“在某个数据页做了什么操作”简单来说就是为了保证数据准确场景系统崩溃了可以找回
bin log归档日志存在server层物理存储通过设置sync_binlog1让其持久化到磁盘与引擎无关存放方式为叠加不会覆盖存储内容包括两部分存储sql存储数据前后变动在数据备份以及回复中用得多简单来说是为了备份数据场景数据还原先备份到指定时间点的数据再根据binlog恢复
undo log回滚日志该日志主要是用于事务执行失败时进行回滚操作同时也是用于MVCC中对数据的历史版本进行查看 2.先贴图
sql
update test set c c 1 where id 2; 3.执行流程
执行器从引擎层查询id2的数据引擎层先从内存中查询是否存在如果不存在则从磁盘中加载返回执行器对c字段进行1后调用引擎层进行写入引擎层更新内存数据同时写入redo log并且设置redo log状态为prepare通知执行器写入bin log 写入后通知引擎层引擎层提交事务修改redo log状态为commit
4.疑问 - 为什么redo log需要两种状态两段提交 防止数据存储时其中写入redo log或者bin log时系统崩溃导致两端数据不一致双重确认有利于保存数据一致性。
举个例子在写入redo log后还没写入bin log这个时候系统崩溃重启了这个时候bin log就会缺少该操作的日志从而导致数据不一致两者调换也一样.