2. Mysql技术内幕-日志文件

[TOC]

文件

错误日志

错误日志文件对mysql的启动运行关闭过程进行了记录
SHOW VARIABLES LIKE 'log_error'

慢查询日志

默认不开启,需要手动设置log_slow_queries设置为true
select * from mysql.slow_log;

查询日志

记录了所有对mysql数据库请求的信息,无论是否得到正确的执行

二进制文件 binlog

记录了对mysql数据库执行更改的所有操作,然后操作本身没有对数据库发生变化,也可能进入二进制文件

二进制文件主要有以下几种作用

  1. 恢复: 某些数据的恢复需要二进制日志,
  2. 复制: 通过复制和执行二进制日志
  3. 审计: 通过二进制日志中的信息来进行审计

参数

  1. max_binlog_size 指定了单个二进制文件的最大值,如果超过该值则产生新的二进制日志文件
  2. binlog_cache_size 所有未提交的二进制文件会记录到一个缓存中,等该事务提交,直接将缓存写入到二进制日志文件
  3. sync_binlog 二进制日志并不是每次写的时候都写入到磁盘,可以设置次数
  4. binlog-do-db 和binlog-ingore-db 表示需要或忽略写入那些库的日志
  5. log-slave-update slave是否写binlog
  6. binlog_format
    1. statement格式: sql语句
    2. row: 解决在readcommited情况下主从不一致,但是文件大小会增加,但在repeatedread由于next-key lock解决了该问题
    3. mixed

innoDB存储引擎文件

表空间文件

innodb采用将存储的数据按照表空间进行存放的设计,在默认配置下会有一个初始大小为10mb,名为ibdata1的文件,该文件就是默认的表空间文件,用户可以通过参数innodb_data_file_path对其进行设置

innodb_file_per_table 每个表产生独立的.ibd文件


image

重做日志文件

在默认情况下,innodb的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件,这个就是重做日志文件,可以使用重做日志恢复到宕机前的数据,保护数据完整性

每个innodb至少有一个重做日志组,且每个组内至少有两个重做日志文件,我们可以创建多个重做日志组到不同磁盘,提高重做日志的高可用性,并且在组内写完一个重做日志文件后再写另一个重做日志文件


1.png

参数介绍

  1. innodb_log_file_size 指定每个重做日志文件的大小
  2. innodb_log_files_in_group 重做日志文件组中文件个数
  3. innodb_mirrored_log_groups 重做日志文件组个数
  4. innodb_log_group_home_dir 重做日志文件目录

重做日志写入过程


1.png

重做日志文件的写入不是直接写,而是先写到重做日志缓冲,然后按照一定条件写入日志文件,并且由于在磁盘写入时是按照扇区为单位进行写入,因此写入必定成功,不用进行doublewrite

redo log和binlog区别

  1. 二进制文件包括inndo,myisam,heap等其他存储引擎日志,而redolog只是innodb本身的事务日志
  2. 记录的内容不同: binlog记录一个事务的具体操作内容,而重做日志记录每个页更改的物理情况
  3. 写入时间不同: binlog只在日志提交时记录,redolog在事务进行中也会写入

你可能感兴趣的:(2. Mysql技术内幕-日志文件)