MySQL日志总结

MySQL日志

MySQL中有七种日志文件,分别是
1. 重做日志(redo log)
2. 回滚日志(undo log)
3. 二进制日志(binlog)
4. 错误日志(errorlog)
5. 慢查询日志(slow query log)
6. 常规日志(general log)
7. 中继日志(relay log)

详细介绍

1. 重做日志(redo log)

作用
重做日志(redo log)的作用是确保事务的持久性,防止在发生故障的时间点,尚有脏页未写入磁盘。
在重启 MySQL 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性。
mysql通过redo log 把磁盘的随机IO 变为 日志的顺序IO, 提升写的效率。
内容
物理格式的日志,记录的是物理数据页面修改的信息,其 redo log 是顺序写入 redo log file 的物理文件中去的。
什么时候产生
事务开始之后就产生 redo log,redo log 的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入 redo log 文件中。
什么时候释放
当对应事务的脏页写入到磁盘之后,redo log 的使命也就完成了,重做日志占用的空间就可以重用(被覆盖),redo log是环形写入的。
对应的物理文件
默认情况下,对应的物理文件位于数据库的 data 目录下的 ib_logfile1&ib_logfile2。
 

innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下。
innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认为 2。

关于文件的大小和数量,由以下两个参数配置:

innodb_log_file_size 重做日志文件的大小。
innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认 1。


其他
很重要一点,redo log 是什么时候写盘的?前面说了是在事物开始之后逐步写盘的。
之所以说重做日志是在事务开始之后逐步写入重做日志文件,而不一定是事务提交才写入重做日志缓存。
原因就是,重做日志有一个缓存区 Innodb_log_buffer,Innodb_log_buffer 的默认大小为 8M,Innodb 存储引擎先将重做日志写入 innodb_log_buffer 中。
后会通过以下三种方式将 Innodb 日志缓冲区的日志刷新到磁盘(innodb_flush_log_at_trx_commit):
    0: 把日志缓冲写到日志文件, 并且每秒刷新一次, 但是事务提交不做任何操作。
    1: 把日志缓冲写到日志文件, 每次事务提交都刷新持久化存储, 这是默认的(最安全的设置)。除非系统做伪刷新。
    2: 每次提交把日志写到日志文件, 但是不刷新, InnoDB每一秒做一次刷新, mysql服务异常,可保证数据不丢失。
由此可以看出,重做日志通过不止一种方式写入到磁盘,尤其是对于第一种方式,Innodb_log_buffer 到重做日志文件是 Master Thread 线程的定时任务。因此重做日志的写盘,并不一定是随着事务的提交才写入重做日志文件的,而是随着事务的开始,逐步开始的。所以可以很好地解释再大的事务提交(commit)的时间也是很短暂的。


2. 回滚日志(undo log)

作用

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值