神刀安全网

MySQL主要日志的基本操作与简单解析

MySQL主要有以下几种日志:

  1. 错误日志
  2. 通用查询日志
  3. 慢查询日志
  4. 二进制日志
  5. DDL日志

日志是mysql数据库很重要的一部分,用来记录数据库运行期间发生的变化,比如mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等你都可以在日志文件中查看到,当数据库莫名其妙崩了,或是出现错误的时候,都可以通过日志来排查问题。
默认情况下,所有日志创建于mysqld数据目录中。

MySQL数据库官方文档https://dev.mysql.com/doc/refman/5.7/en/server-logs.html
官方文档为英文版本,英文好的小伙伴可自行翻阅~

1. 错误日志 (error log)

默认情况下,错误日志是默认开启的。除错误日志外其他日志默认都是关闭状态。
错误日志的内容比较多,我会单独写一篇文章。此处先留空~

2. 通用查询日志 (general query log )

通用查询日志是记录所有MySQL数据库请求信息的,客户端连接或断开连接的信息都会写入此日志,并记录从客户端接收到的每条SQL语句。也就是说不管你对数据库做了啥,有没有得到正确的反馈,都会被记录下来

show variables like '%general_log%';(查看开启状态) 
MySQL主要日志的基本操作与简单解析

set global general_log = on;(开启查询日志) 

(开启有风险,操作需谨慎~ 会影响一定的性能 生产环境下不建议开启)
一般有两种形式,一种是输出到文件中,一种是写入数据表格中。

show variables like 'log_output';(查看状态) 
MySQL主要日志的基本操作与简单解析

如果想更换为写入数据表,命令如下:

set global log_output='table'; 

注意:如果设置log_output=table的话,则日志结果会记录到名为gengera_log.csv的表中

每条操作都记录是很消耗性能的,那么我们来关闭它。

set global general_log=off;(关闭查询日志) 
3. 慢速查询日志 (slow query log)

简单来讲,慢查询日志就是用来记录执行时间超过指定时间的查询语句,long_query_time的最小值和默认值分别 为0和10(秒)。
当然默认情况下,慢查询日志是禁用的。
我们可以手动开启,然后通过慢查询日志,查找出哪些查询语句的执行效率低,进行优化。
慢查询日志支持将记录写入文件,也支持将记录写入数据库表。

默认情况下slow_query_log为OFF
开启方法:设置slow_query_log的值为1来开启

sqlset global slow_query_log=1; 

Query OK之后就可以看到如下图,表格第二行为日志文件保存的路径

sqlshow variables like '%slow_query_log%'; 
MySQL主要日志的基本操作与简单解析

但是!这种方法只是临时生效!!!如果你不小心重启了服务器,那么不好意思,请重新配置一遍吧,如果你想的起来的话….
那么,如何让它永久生效呢?
修改配置文件my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file,然后重启MySQL服务

slow_query_log =1long_query_time=3(慢查询设置的时间阈值,表示运行超过3秒的sql语句都会被记录下来) slow_query_log_file=/www/server/data/mysql-slow.log(此处为你想指定的存放路径) log-queries-not-using-indexes(表示记录下没有使用索引的查询) 

重启mysql服务:

service mysql restart 

查看设置的时间阈值为多少

show global variables like 'long_query_time';  
MySQL主要日志的基本操作与简单解析

设置时间阈值:

set global long_query_time=10; 

使用more查看日志内容

more /www/server/data/mysql-slow.log  

此处不再做过多的赘述,详细了解请翻阅文档。

4. 二进制日志(binary log)

MySQL的二进制日志记录了对mysql数据库执行更改的所有操作,并且记录了更新数据语句发生时间、执行时长、等额外信息,但是不记录查询等不修改数据的SQL语句。顾名思义,它是一个二进制文件,主要用于数据库恢复和主从复制,以及审计操作。

show variables like 'log_bin';(查看开启状态) 

MySQL主要日志的基本操作与简单解析

MySQL主要日志的基本操作与简单解析

20180525015439.png

图中mysql-bin.index的文件是存储所有二进制日志文件的清单,又称为二进制文件的索引。
开启方法:直接修改配置文件my.cnf文件中mysqld下面添加log-bin =DIR / filename
DIR为目录 filename为文件名
eg:log_bin=/mysql/bin_log/mysql_binlog(设置日志文件路径)

二进制日志有两个重要目的:

  1. 对于复制,主复制服务器上的二进制日志提供了要发送给从服务器的数据更改记录。主服务器将其二进制日志中包含的事件发送给其从服务器,从服务器执行这些事件,以对主服务器进行相同的数据更改。
  2. 某些数据恢复操作需要使用二进制日志。备份恢复后,重新执行备份后记录的二进制日志中的事件。这些事件从备份的角度使数据库保持最新状态。
purge binary logs before '2018-05-20 00:00:00';(清除某个时间点以前的二进制日志文件) reset master;(清除所有的二进制日志文件) show binary logs; 

详细请参见mysql官方文档

5. DDL日志 (DDL log )

DDL日志或元数据日志记录由数据定义语句(如DROP TABLE或者 ALTER TABLE) 生成的元数据操作。MySQL用此日志来恢复元数据操作中发生的崩溃。
元数据操作的记录会写入到MySQL数据目录中的ddl_log.log(二进制文件)中。
目前,ddl_log.log最多可容纳1048573个条目,大小相当于4 GB。
超过此限制后,必须重新命名或删除文件,才能执行其他DDL语句。

如有错误,欢迎指正

原文已发布在个人博客 更多原创文章请移步个人主站~~
原文链接:https://ixiyu.me/index.php/archives/252/

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » MySQL主要日志的基本操作与简单解析

分享到:更多 ()