redo log是在事务begin时就开始记录(并不是事务commit时才记录,由于全体事务做的操作可能很多,如果在commit的时候才写redo log,此时一旦发生非常,redo log还没写,这就太晚了,无法确保事务的持久性)。

redo log 是物理日志,记录的是“在某个数据页上做了什么修正”。
其余,redo log是循环写入固定的文件,而且是顺序写入磁盘的。

在一个事务中,可能会发生多次的数据修正,对应的便是多个数据页多个偏移量位置的字段变更,也便是说会产生多条redo log,而且由于在同一个事物中,这些redo log,也是不可再分的,也便是说,一个组的redo log在持久化的时候,不能部分成功,部分失落败,否则的话,就会毁坏事务的原子性。

phpmysqllog文件MySQL基本入门MySQL日记文件解析 Python

其余为了提升性能redo log是按照块组织在一起,然后写入到磁盘中的,类似于数据的页,而且引入了redo log buffer,默认的大小为16MB。
buffer等分了很多的block,每个block的大小为512kb,每一个事务产生的所有redo log称为一个group。

Undo Log (回滚日志)

数据库事务开始之前,会将要修正的记录放到Undo日志里,当事务回滚时或者数据库崩溃时,可以利用UndoLog撤销未提交事务对数据库产生的影响。

Undo log的浸染:

事务回滚 - 原子性:当事务回滚时或者数据库崩溃时,可以利用Undo Log来进行数据回滚。
多个行版本掌握(MVCC)- 隔离性:即在InnoDB存储引擎中MVCC的实现是通过Undo来完成。
当用户读取一行记录时,若该记录已经被其他事务占用,当前事务可以通过Undo读取之前的行版本信息,以此实现非锁定读取。
Binary Log (二进制日志)

binary 便是bin log,即二进制日志文件,这个文件记录了MySQL所有的DML操作。
通过binlog日志我们可以做数据规复,增量备份,主主复制和主从复制等等。

binlog日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件。
二进制日志文件(文件名后缀为.00000)记录数据库所有的DDL和DML(除了数据查询语句select)语句事宜。

binlog日志

查看binlog日志是否开启:

mysql> show variables like '%log_bin%';+---------------------------------+----------------------------------+| Variable_name | Value |+---------------------------------+----------------------------------+| log_bin | ON || log_bin_basename | /www/server/data/mysql-bin || log_bin_index | /www/server/data/mysql-bin.index || log_bin_trust_function_creators | OFF || log_bin_use_v1_row_events | OFF || sql_log_bin | ON |+---------------------------------+----------------------------------+6 rows in set (0.00 sec)

启用binlog,在 my.cnf 配置文件中加入 log-bin 配置,表示启用binlog,如果没有给定值,写成 log-bin=,则默认名称为主机名。
(注:名称若带有小数点,则只取第一个小数点前的部分作为名称)

[mysqld]## 我配置的文件名为mysql-binlog-bin=mysql-bin查看binlog日志master 状态:

mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000009 | 80774638 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

上面的查询结果表示末了(最新)一个binlog日志的编号名称(mysql-bin.000009),及其末了一个操作事宜pos结束点(Position)值

查看binlog日志列表

mysql> show master logs;+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000008 | 60794094 || mysql-bin.000009 | 80774638 |+------------------+-----------+2 rows in set (0.00 sec)

表示,当前我的MySQL做事有两个binlog文件mysql-bin.000008和mysql-bin.000009

Error Log (缺点日志)

缺点日志记录了MySQL 做事器运行过程中所有较为严重的警告和缺点信息,以及MySQL做事器每次启动和关闭的详细信息。

在默认情形下,系统记录缺点日志的功能是关闭的( 我所利用的 MySQL 5.6 是开启的 ),缺点信息被输出到标准缺点输出( Stderr )。

查看缺点日志

mysql> show variables like "log_error";+---------------+-----------------------+| Variable_name | Value |+---------------+-----------------------+| log_error | ./VM-16-15-centos.err |+---------------+-----------------------+1 row in set (0.00 sec)

根据查询结果可知,缺点日志保存在数据目录下名为VM-16-15-centos.err的文件中。
如果查询结果为stderr,则表示输出到屏幕,缺点的信息只会输出到我们的终端屏幕,并不会记录在日志中。

开启缺点日志

在配置文件[mysqld]组添加如下一行配置:

# log_error记录了缺点日志所在位置log_error = /www/server/data/VM-16-15-centos.errSlow Query Log (慢查询日志)

慢查询日志是记录查询时长超过指定时间的日志,慢查询日志紧张用来记录韶光较长的查询语句,通过慢查询日志可以找出查询韶光较长的、实行效率较低的语句,以便进行优化。

默认情形下,慢查询日志功能是关闭的。
如果不是调优须要,一样平常不建议启动该参数,由于开启慢查询日志会或多或少带来一定的性能影响。

查看慢查询日志

mysql> show variables like "%slow_query%";+---------------------+---------------------------------+| Variable_name | Value |+---------------------+---------------------------------+| slow_query_log | ON || slow_query_log_file | /www/server/data/mysql-slow.log |+---------------------+---------------------------------+2 rows in set (0.00 sec)

MySQL通过long_query_time参数来指定慢查询韶光,韶光以秒为单位。
如果查询韶光超过了这个韶光值,这个查询语句将被记录到慢查询日志,如果不设置,默认韶光为 10 秒。

mysql> show variables like "%long_query_time%";+-----------------+----------+| Variable_name | Value |+-----------------+----------+| long_query_time | 3.000000 |+-----------------+----------+1 row in set (0.00 sec)开启和关闭慢查询日志

#开启慢查询日志 0关闭 1开启SET GLOBAL slow_query_log=1;#修正慢日志记录SQL的最低阈值韶光,单位秒SET GLOBAL long_query_time=3;General Log (一样平常查询日志)

一样平常查询日志会记录MySQL所有的SQL语句,不管是查询语句,还是DML语句,还是DDL语句,还是DCL语句,这些语句统统都会被记录在general log文件中。
就连我们连接和断开MySQL数据库的这些语句。

MySQL会把它收到的所有SQL语句按照吸收的顺序依次记录在general log中。
默认情形下一样平常查询日志是关闭的(OFF状态),并且默认保存在数据包目录中。

查看一样平常查询日志

mysql> show variables like "%general%";+------------------+--------------------------------------+| Variable_name | Value |+------------------+--------------------------------------+| general_log | OFF || general_log_file | /www/server/data/VM-16-15-centos.log |+------------------+--------------------------------------+2 rows in set (0.01 sec)

genral_log:用于掌握是否开启general log。
即是0表示关闭,即是1表示开启。
默认是0。

general_log_file:指定general log日志的保存路径和文件名,如果不配置这个参数的话,默认会以MySQL做事器的hostname作为general log日志的文件名称,详细文件为:<hostname>.log。
日志的存放路径,如果不指定,则默认放在datadir参数所指定的目录下,也可以在这个参数中指定详细的路径+名称

开启一样平常查询日志

通用日志有一个默认的保存路径,和我们的数据库文件在同一个目录下,我们只须要开启即可。

mysql> set @@global.general_log = 1;Query OK, 0 rows affected (0.03 sec)

然后我们在查看一样平常查询日志的状态,就会创造已经是ON。

Relay Log (中继日志)

一样平常情形下它在MySQL主从同步读写分离集群的从节点才开启。
主节点一样平常不须要这个日志。

MySQL主从同步

如上图,master主节点的binlog传到slave从节点后,被写到relay log里,它是一个临时的日志文件,用于存储从master节点同步过来的binlog日志内容,它里面的内容和master节点的binlog日志里面的内容是同等的。
然后slave从节点从这个relaylog日志文件中读取数据运用到数据库中,来实现数据的主从复制。

总结

MySQL日志文件是数据库的主要组成部分,本文先容的七种日志文件,随便一种都可以延伸出很多知识点。
但是作为MySQL根本入门文章,我们只对日志文件做大略的理解,并没有进行深入的探索,虽然偏理论性知识,但是对利用和学习MySQL非常主要。

结束语

你知道的越多,不知道的就越多。

程序员的教化便是对技能发自内心的欣赏和敬畏!
倘若文中表述有误,还请包涵,并欢迎与我谈论,自主思考永久比被动接管更有效!