一、MySQL日志类型简介
在MySQL中,主要有5种日志文件:
日志类型 | 写入日志的信息 |
---|---|
错误日志(Error log) | 启动,运行或停止mysqld遇到的问题 |
通用查询日志(General query log) | 建立的客户端连接和从客户端收到的语句 |
二进制日志(Binary log) | 记录更改数据的语句(也用于复制) |
中继日志(Relay log) | 从主服务器收到的数据更改 |
慢查询日志(Slow query log) | 记录执行耗时超过long_query_time 的查询 |
DDL日志(metadata log) | DDL语句执行的元数据操作 |
二、各大日志类型简单介绍
1.错误日志
错误日志文件默认为datadir目录下的 hostname.err文件,hostname表示当前的主机名。当然你也可以通过在[mysqld]配置下配置log-error=[file_path]来指定错误日志文件的名字和路径。MySQL启动时如果没有错误日志,则会自动创建错误日志,但是如果在运行时删除了错误日志则不会重新创建。
如果不知道错误日志的位置,可以在MySQL命令行通过变量log_error来查看。
mysql> show variables like "log_error";
+---------------+----------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------+
| log_error | ./luther.err |
+---------------+----------------------------------------+
2.通用查询日志
常规查询日志是mysqld在做什么的常规记录 。当客户端连接或断开连接时,服务器会将信息写入此日志,并按照接收语句的顺序记录从客户端收到的每个SQL语句。查询日志默认是关闭的,默认为datadir目录下的 hostname.log文件,hostname表示当前的主机名。当然你也可以通过在[mysqld]配置下配置general_log=ON来打开查询日志、general_log_file=[file_path]来指定查询日志文件的名字和路径。因查询日志在生产中一般是不会打开的(不推荐打开,因为查询日志记录的太多,会导致频繁IO消耗大量资源),所以此处不做过多介绍,有兴趣的请参考官网。
3.二进制日志(详细待补充,查看详细可以参考https://blog.csdn.net/demonson/article/details/80664141)
二进制日志包含描述数据库更改(例如表创建操作或表数据更改)的事件。除非是使用基于行的日志记录,否则它还包含针对可能进行了更改的语句的事件(例如, DELETE
不匹配任何行)。二进制日志还包含有关每个语句更新数据花费时间的信息。二进制日志有两个重要目的:
-
用于复制,主服务器上的二进制日志提供了要发送到从服务器上数据更改的记录。
-
某些数据恢复操作需要使用二进制日志。
二进制日志文件默认为hostname-bin开始的文件(例如:mysql-bin.000001和mysql-bin.index),hostname表示当前的主机名。
二进制日志支持三种格式类型:
- 基于行的日志:主服务器将影响各个表行的事件写入二进制日志。
--binlog-format=ROW
- 基于语句的日志:基于SQL语句。
--binlog-format=STATEMENT
- 基于混合的日志:默认情况下使用基于语句的日志记录。
--binlog-format=MIXED
查看二进制日志需要使用mysql客户端工具mysqlbinlog去查看
4.中继日志(详细待补充)
中继日志也是一种二进制日志,只不过该日志是保存在从服务器中,是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。主要用于主从同步。
5.慢查询日志(详细待补充)
慢查询日志记录了执行花费超过 long_query_time
时间(查询获取锁(包括锁等待)的时间不计入查询时间内),并且有超过min_examined_row_limit
行的结果的查询SQL。慢查询日志是在查询执行完毕且已经完全释放锁之后才记录的,因此慢查询日志记录的顺序和执行的SQL查询语句顺序可能会不一致(例如语句1先执行,查询速度慢,语句2后执行,但查询速度快,则语句2先记录)。默认情况下,慢查询日志是禁用的。要明确指定初始慢查询日志状态,请使用 --slow_query_log[={0|1}]
。不带参数或参数为1时, --slow_query_log
启用日志。参数为0时,此选项禁用日志。默认情况下,慢查询日志不记录管理语句(例如:ALTER TABLE等),也不记录不使用索引的查询。可以使用log_slow_admin_statements
和 log_queries_not_using_indexes
参数去修改该设置。
6.DDL日志(详细待补充)
DDL日志或元数据日志记录由数据定义语句(如DROP TABLE和ALTER TABLE)生成的元数据操作,并将其写入MySQL数据目录(datadir)中的文件ddl_log.log中。 MySQL使用此日志从元数据操作中发生的crash中恢复。ddl_log.log是一个二进制文件,它不是想要人为可读的,所以你不应该以任何方式尝试修改其内容。在实际需要记录元数据语句之前,不会创建ddl_log.log,并在mysqld成功启动后被删除。因此,该文件可能不会以完全正常的方式运行在MySQL服务器上。目前,ddl_log.log最多可容纳1048573个输入,大小相当于4 GB。超出此限制后,您必须重命名或删除该文件,才能执行任何其他DDL语句。
现在没有用户可配置的与此文件关联的服务器选项或变量。