MySQL知识点复习 - 常用的日志类型

MySQL中常用的日志类型:

重做日志(redo log)

  • 作用:确保事务的持久性。redo日志记录事务执行后的状态,用来恢复还未写入data file的已成功事务更新的数据。防止在发生故障的时间点,尚有脏页未写入磁盘,再重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性。
  • 内容:物理格式的日志,记录的是物理数据页面修改的信息,顺序写入redo log file的物理文件中。
  • 什么时候产生:事务开始之后就产生redo log,redo log的落盘并不是根据事务的提交才写入的,而是事务的执行过程中就写入redo log中的。
  • 什么时候释放:对应事务的脏页写入到磁盘当中,redo log的任务就完成了,redo log占用的空间就会被覆盖。

回滚日志(undo log)

  • 作用:保证数据的原子性,保证了事务发生前的数据的一个版本,用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
  • 内容:逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复到事务之前的状态,而不是从物理页面上操作实现的。
  • 什么时候产生:事务开始时,用当前的版本生成undo log,undo log会产生redo来保证undo的可靠性。
  • 什么时候释放:当事务提交之后,会放入待清理的链表中,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,觉得是否清楚undo log的日志空间。

二进制日志(bin log)

  • 作用:用于复制,从库利用主库上的binlog进行重播,实现主从复制,用于数据库基于时间点的还原
  • 内容:逻辑格式的日志,执行过的事务中的sql语句,包括了执行的sql语句(增删改)反向的信息,也就意味着delete对应着delete本身和其反向的insert;update对应着update执行前后的版本的信息;insert对应着delete和insert本身的信息。因此可以使用binlog实现类似于oracle的闪回功能。
  • 什么时候产生:事务提交的时候一次性将事务中的sql语句按照一定的格式记录到binlog中。所以在启动了bin log的时候,如果在提交一些很大的事务,效率会因此变得较慢。
  • 什么时候释放:通过配置在指定的日期里自动删除

二进制日志的作用是用来还原数据库的,与redolog是类似的,但本质不同

  • 作用不同:redo log是保证事务的的持久性,是事务层面的,binlog具有还原功能,是数据层面的。
  • 内容不同:redo log是物理日志,binlog是逻辑日志

错误日志(error log)

  • 记录启动和停止以及服务器中发生的错误信息

慢查询日志(general slow log)

  • 慢日志记录执行时间过长和没有使用索引的查询语句,报错select、update、delete以及insert语句,慢日志只会记录执行成功的语句。

一般日志(general query log)

  • 记录了服务器接收到的每一个查询或是命令,无论这些查询或是命令是否正确甚至是否包含语法错误

中继日志(relay log)

relay log只在主从服务器 的架构中的从服务器中存在(是我这种小菜鸟无法接触的苦),从服务器为了和主服务器保持一直就要读取二进制日志(bin log)的内容然后把这些信息存到本地的日志文件去,这个存在本地的日志文件就是relay log。

因为格式跟binlog的日志文件相同,因此也是可以用 mysqlbinlog进行读取。

主要充当一个缓冲的作用,因为主要是主从复制,线程先将主服务器的binlog先存到relay log里面去,这样就可以不用等完全复制完再发送下一个bin log了(队列的思想处处都有,真的优秀这些轮子)

相关推荐
mqiqe1 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
工业甲酰苯胺2 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
BestandW1shEs2 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师2 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球2 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...2 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00012 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502772 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度2 小时前
mysql中between and怎么用
数据库·mysql