目录
1. MySQL 日志有哪些?
MySQL 数据库为我们提供了很多种不同类型的日志文件,用来存储不同类型的日志。主要有错误日志,二进制日志,通用查询日志,慢查询日志。
在MySQL8之后,又新增了两种日志:中继日志和数据定义语句日志(简单了解)。
2. 各种日志分析
2.1 错误日志
错误日志:记录 MySQL 服务器的启动,运行或停止 MySQL 服务时出现的任何严重问题的相关信息;当数据库出现任何问题无法正常使用时,建议首先查询此日志。方便我们了解服务器的状态,从而对服务器进行维护。错误日志在数据库中是默认开启的。
2.2 二进制日志
二进制日志:记录所有DDL(数据定义语句)和DML(数据操纵语句),但不包括查询(SELECT,SHOW)语句。
此外(1)二进制日志还可以用于数据恢复,如果 MySQL 数据库发生意外停止,可以通过二进制日志文件查看用户查看用户执行了哪些操作,对数据库服务器文件做了哪些修改;然后通过二进制日志文件中的数据恢复数据库服务器;
(2)二进制日志用于主从数据同步,由于日志的延续性和时效性,主服务器可以把它的二进制日志文件传递给其他从服务器来达到数据同步的目的。
MySQL8.0版本中二进制日志在数据库中是默认开启的。
MySQL 服务器中有多种格式来记录二进制日志,具体格式见下图
2.3 通用查询日志
通用查询日志:记录了客户端的所有增删改查操作语句,并且以 SQL 语句的方式记录在通用查询日志中,而二进制日志中不包含SELECT查询数据的 SQL 语句。通用查询日志是默认关闭的,需要手动开启。如果在业务比较繁忙的系统中开启通用查询日志,那么通用查询日志的文件是会非常大的。实际开发过程中可以根据需求考虑是否开启。
2.4 慢查询日志
慢查询日志:记录所有执行时间超过 long_query_time(默认是10秒,可以另外设置,最小为0) 的所有查询,并且记录了扫描记录数不小于 min_ examined_row_limit 的所有 SQL 语句的日志。通过慢查询日志可以让我们清楚的知道哪些 SQL 语句执行速度较慢,影响整体系统的性能,方便我们对 SQL 语句做优化。慢查询日志功能默认也是关闭的。
2.5 中继日志
中继日志:用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作。
2.6 数据定义语句日志
数据定义语句日志:记录数据定义语句执行的元数据操作。
2.7 补充点
在上述六个数据库日志文件中,只有二进制日志采用的是二进制的方式存储日志信息,其余五个日志都是采用文本文件的方式存储日志信息。
3. 日志有什么用(优点)
通过上面对各个日志的简单介绍,我们大致可以从中得出一个共同的作用——通过日志文件,我们就可以知道数据库内部发生了哪些事,当数据库出现故障时,我们就可以通过日志快速定位故障原因。
4. 日志的弊端
日志功能会降低MySQL服务器的性能。因为在查询非常繁忙的数据库服务器中,如果开启了通用查询日志和慢查询日志,MySQL会花费很多时间来记录日志。
日志会占用大量磁盘空间。因为日志也是需要文件进行存贮的嘛,对于用户量大操作繁杂的数据库而言,日志文件需要的存储空间设置比数据库文件需要的存储空间还要大。