Mysql——如何做到Redolog崩溃后恢复的
目录
-
- 一、MySQL引擎层BufferPool工作过程原理
- 二、Mysql如何做到Redolog崩溃后恢复的(即mysql是如何保证数据不丢失)
-
- 2.1、提交事务时正好mysql直接挂掉,更新的数据是否就丢失
- 2.2、Mysql如何做到Redolog崩溃后恢复的(即mysql是如何保证数据不丢失)
- 2.3、为什么把修改的数据存放到RedoLog中而不是直接写到磁盘文件?
- 2.4、indodb_flush_log_at_trx_commit提供的3种刷盘策略
一、MySQL引擎层BufferPool工作过程原理
-
首先关闭自动提交,执行一条修改语句。
SET AUTOCOMMIT =0; update employees set name='张三' where id=1:
-
客户端连接mysql服务层,再由服务层的执行器去调用innoDB引擎,首先会去innoDB引擎的BufferPool中查看id=1的数据有没有在BufferPool中进行缓存,
-
如果有,则直接更新BufferPool中的缓存,
-
如果没有,则去磁盘.idb文件中去加载id=1的数据,根据索引找到id=1的数据页,找到数据页后,把整个数据页缓存在BufferPool中,从而针对id=1的数据进行修改。把修改之前的数据存放到Undolog中来进行备份,为后续的数据回滚、事务隔离相关的操作。