毕节做网站,网站制作案例市场,有没有专门做老年婚介的网站,wordpress 文章时间轴一、什么是redolog日志
redolog又叫重做日志#xff0c;处于存储引擎层#xff0c;是innodb特有的日志。主要是为了实现事务的持久性而存在的。事务的持久性#xff1a;只要提交了事务#xff0c;出现停机或者崩溃的情况#xff0c;都能将提交事务的数据修改正常持久化到…一、什么是redolog日志
redolog又叫重做日志处于存储引擎层是innodb特有的日志。主要是为了实现事务的持久性而存在的。事务的持久性只要提交了事务出现停机或者崩溃的情况都能将提交事务的数据修改正常持久化到磁盘。
二、redolog日志记录的是什么
redolog记录的是当前事务对数据页的修改每条redo记录由“表空间号数据页号偏移量修改数据长度具体修改的数据”组成记录的是事务在那个表空间对那个数据做的修改属于物理日志。
三、redolog的是怎么保存的
redolog的记录可以理解成一个圆环循环覆盖写入当redolog满了时系统就会停止所有更新促进checkpoint推进。硬盘上存储的redo log日志文件不只一个而是以一个日志文件组的形式出现的每个的redo日志文件大小都是一样的比如可以配置为一组4个文件每个文件的大小是1GB整个redo log日志文件组可以记录4G的内容。
四、redolog的刷盘时机
mysql里面的操作都是遵循WAL(write ahead log)先写入日志文件再写入磁盘。日志文件的写入都是顺序写(包括binlog和undolog)。redolog对应的缓存区为redolog buffer。这个缓存区域的刷盘可以通过innodb_flush_log_at_trx_commit进行配置支持三种策略
设置为0的时候表示每次事务提交时不进行刷盘操作设置为1的时候表示每次事务提交时都将进行刷盘操作默认值设置为2的时候表示每次事务提交时都只把redo log buffer内容写入page cache
另外InnoDB存储引擎还有两个兜底的刷盘规则
有一个后台线程每隔1秒就会把redo log buffer中的内容写到文件系统缓存page cache然后调用fsync刷盘。redo log buffer占用的空间即将达到innodb_log_buffer_size一半的时候后台线程会主动刷盘。
所以当innodb_flush_log_at_trx_commit设置为0时刷盘的时机就是兜底1每隔1秒刷新最差就是丢失1秒的数据。 当设置为1时不会有数据丢失即使是崩溃了这部分事务没有提交那么日志也不存在也就不存在丢失但是这个的性能就不太好。 当设置为2时如果是mysql挂了不会有任何损失但是如果是系统重启了可能会有1秒的数据丢失。
五、redolog和binlog的两阶段提交
commit提交事务时的操作为先写redolog(prepare) - 写binlog -写redolog(commit): 1、prepare阶段写redo log 2、commit阶段写binlog并且将redo log的状态改成commit状态 mysql发生崩溃恢复的过程中会根据redo log日志结合 binlog 记录来做事务回滚 1、如果redo log 和 binlog都存在逻辑上一致那么提交事务 2、如果redo log存在而binlog不存在逻辑上不一致那么回滚事务