mysql的日志文件及其作用

时间:2023-01-27 16:36:42

MySQL中有七种日志文件,分别是:

  • 重做日志(redo log)
  • 回滚日志(undo log)
  • 二进制日志(binlog)
  • 中继日志(relay log)
  • 错误日志(errorlog)
  • 慢查询日志(slow query log)
  • 一般查询日志(general log)

下面介绍前4种。。。。

1. redo log

 a.作用

  保持了事务的持久性, 采用循环写的方式将写数据,写入方式请参考https://www.cnblogs.com/zhixinSHOU/p/13214933.html

 b.内容

  物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。

 b.开始节点

  事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。

 c.结束节点

  当对应事务的脏页写入到磁盘之后,redo log的使命也就完成了,重做日志占用的空间就可以重用(被覆盖)。

2.undo log

 a.作用

  保证了事务的原子性,当事务开始回滚的时候会用到

 b.内容:

  逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于redo log的。

 c.开始节点:

  事务开始之前,将当前是的版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性

 d.结束节点:

  当事务提交之后,undo log并不能立马被删除,而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。

3. binlog

 a.作用

  主从复制,

  前提:主库将操作记录存到binlog中,

  在发生主从复制时,

  1. 主库会发起一个log dump线程,用来给从库I/O线程传binlog;

  2.从库发起一个I/O线程接收binlog文件,并将得到的binlog文件写到本地relay-log(中继日志)中,

  3.从库发起一个SQL 读取中继日志文件,逐一执行sql语句

在主从复制的时候需要注意的事

  1) Master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能,通常为了数据安全考虑,salve也开启binlog功能)

  2) Slave开始俩个线程:IO线程和sql线程,其中:IO线程负责读取master的binlog内容到中继日志relay log里,sql线程负责从中继日志里读取binlog内容,并更新到slave的数据库,这样就能保持slave数据和master数据保持一致了

  3) 至少有俩个Mysql的服务

  4) 最好确保master和slave服务器上的Mysql版本相同,或者主服务器小于子服务器

  5) Master和slave 俩节点时间需同步

4.relay-log

  作用已经在上面介绍过了,不再重复介绍了

  

已经