0
点赞
收藏
分享

微信扫一扫

SpringMVC底层原理源码解析

柠檬果然酸 2023-05-21 阅读 102

目录

一,前言

二,binlog-备份日志

1,作用

Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自带的。
作用: 数据备份和主从同步。

2,使用场景

在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复。

  • 主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。
  • 数据恢复:通过使用mysqlbinlog工具来恢复数据。

3,日志形式

Bin Log共有三种日志格式,可以binlog_format配置参数指定
在这里插入图片描述

4,binlog刷盘时机

对于InnoDB存储引擎而言,只有在事务提交时才会记录biglog,此时记录还在内存中,那么biglog是什么时候刷到磁盘中的呢?mysql通过sync_binlog参数控制biglog的刷盘时机,取值范围是0-N:

  • 0:不去强制要求,由系统自行判断何时写入磁盘;
  • 1:每次commit的时候都要将binlog写入磁盘;
  • N:每N个事务,才会将binlog写入磁盘。

从上面可以看出,sync_binlog最安全的是设置是1,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

三,redo log-重做日志

1,概念

2,为什么需要redo log

  • 事务的四大特性里面有一个是持久性,具体就是只要事务提交成功,数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么mysql是如何保证持久性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中
  • 但是这么做会有严重的性能问题,主要体现在两个方面:
    (1)因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了
    (2)一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机IO写入性能太差
  • 因此mysql设计了redo log,具体来说就是只记录事务对数据页做了哪些修改

3,日志形式

redo log实际上记录数据页的变更,而这种变更记录是没必要全部保存,因此redo log实现上采用了大小固定,循环写入的方式,当写到结尾时,会回到开头循环写日志

4,redo log与binlog区别

在这里插入图片描述

四,undo log-回滚日志

1,undo log的内容和作用

undo log记录的是逻辑日志,也就是sql语句
比如:当我们执行一条insert语句时,Undo Log就记录一条相反的delete语句。
作用:

  • 回滚事务时,恢复到修改前的数据。

  • 实现 MVCC(多版本并发控制,Multi-Version Concurrency Control) 。

  • MySQL事务中原子性就是使用Undo Log实现的。

2,mysql的日志

举报

相关推荐

0 条评论