MySQL日志管理

日志操作是数据库维护中最重要的手段之一,由于日志文件会记录MySQL服务器的各种信息,所以当MySQL服务器遭到意外的损害时,
不仅可以通过日志文件来查看出错的原因,而且还可以通过日志文件进行数据恢复。

在MySQL所支持的日志文件里,除了二进制日志文件外,其他日志文件都是文本文件。默认情况下,MySQL软件只会启动错误日志文件,
而其他日志文件则需要手动启动才可以被启动。

  • 二进制日志:该日志文件会以二进制形式记录数据库的各种操作,但是不记录查询语句。
  • 错误日志:该日志文件会记录MySQL服务器启动、关闭和运行时出错等信息。
  • 通用查询日志:该日志记录MySQL服务器的启动和关闭信息、客户端的连接信息、更新数据记录SQL语句和查询数据记录SQL语句。
  • 慢查询日志:记录执行时间超过指定时间的各种操作,通过工具分析慢查询日志可以定位MySQL服务器性能瓶颈所在。

操作二进制日志

启动二进制日志

默认情况下,二进制日志是关闭的,如果想启动二进制日志,可以通过设置MySQL服务器的配置文件my.ini来实现

[mysqld]
log-bin[=dir\filename]
  • 参数dir用来指定二进制文件的存储路径
  • 参数filename用来指定二进制文件的文件名,具体格式为filename.number

在具体启动二进制日志时,如果没有设置参数dir和filename,二进制日志文件将使用默认名字主机名-bin.number,保存到默认目录-数据库数据文件里。

MySQL日志管理_第1张图片

查看二进制日志

如果需要查看二进制日志,需要通过执行命令mysqlbinlog命令来实现

mysqlbinlog filename.number

MySQL日志管理_第2张图片

停止二进制日志

如果想要停止二进制日志功能,只需要删除[mysqld]组里的log-bin内容即可。

暂停二进制日志

SET SQL_LOG_BIN=0
SET SQL_LOG_BIN=1

SQL_LOG_BIN的值为0时,表示暂停二进制日志功能,当设置为1的时候,表示重新开启二进制日志功能。

删除二进制日志

删除二进制日志

# 删除所有二进制日志
RESET MASTER

# 删除编号小于number的所有二进制文件
PURGE MASTER LOGS TO 'filename.numer'

# 删除指定时间
PUGRE MASTER LOGS BEFORE 'yyyy-mm-dd hh:MM:ss'

注意,这些语句在登录MySQL上才能使用操作。

操作错误日志

启动错误日志

在MySQL中数据库服务器里,错误日志默认是开启的,同时该种类型的日志也是无法被禁止的。

不过我们可以更改错误日志存放目录,修改my.ini

[mysqld]
error-bin[=dir\[filename]]

如果没有文件my.ini里设置错误日志的相关信息,错误日志将文件使用默认名字主机名.error,保存到默认目录-数据库数据文件里。
在这里插入图片描述

查看错误日志

由于错误日志是以文本文件的形式存储内容,所以可以直接使用普通文本工具来查看该类型日志内容。
在这里插入图片描述

删除错误日志

删除错误日志的命令

mysqladmin -u root -p flush-logs

执行上述命令,MySQL首先会创建一个新的错误日志,然后将旧的错误日志更名为filename.err-old。

通用查询日志

通用查询日志主要用来记录用户关于MySQL服务器的所有操作,包含MySQL服务器的启动和关闭信息、客户端的连接信息、更新数据记录SQL语句和查询记录SQL语句。由于该日志记录了客户端连接MySQL的所有请求,如果当前实例访问量大,此日志会急剧增加,会抢占系统IO导致影响MySQL的性能,一般建议关闭此日志,需要时可以通过设置环境变量打开。

启动通用查询日志

默认情况下,通用查询日志是关闭的,如果想启动通用查询日志,可以在my.ini配置

[mysqld]
log [=dir\[filename]]

以上方法是通过配置文件指定了开启了通用查询日志,此时需要重启MySQL服务器才可使设置生效,除此以外,还有一种方法通过设置MySQL的环境变量进行动态的控制通用查询日志的开启与关闭。通过设置环境变量general_log进行通用查询日志的动态控制,而不需要重启MySQL服务器。

# 通过设置环境变量general_log进行通用查询日志的动态控制,on表示开启
> set global general_log=on
> set global general_log_file='SearchData.log'
show variables like '%general_log%'

MySQL日志管理_第3张图片

查看通用查询日志

由于通过查询日志是以文本形式的形式存储内容,所以可以直接用文本文具看。
MySQL日志管理_第4张图片

停止通用查询日志

一种可以通过配置my.ini文件

[mysqld]
#log [=dir\[filename]]

在上述语句中,通过将相关配置注释掉,然后重启MySQL服务器,则可以停止通用查询日志

还可以通过命令停止该日志

set global general_log=off

删除通用查询日志

mysqladmin -u root -p flush-logs

执行上述命令,如果为删除查询日志,MySQL服务器会创建一个新的查询日志,覆盖旧的查询日志。

慢查询日志

慢查询主要用来记录执行时间超过指定时间的查询语句。通过查看该类型日志文件,可以查找哪些查询语句的执行效率低,以便找出MySQL服务器的性能瓶颈从而进行优化。

启动慢查询日志

通过配置文件my.ini来实现

[mysqld]
log-slow-queries=[=dir\[filename]]
long_query_time=n

参数n用来设置时间,该值的单位为秒。如果没有设置long_query_time选项,默认时间为10秒
通过上述方法开启了MySQL服务器的慢查询日志,此时需要重启MySQL服务器以便设置生效。

另一种方法动态的控制慢查询日志的开启与停止。

set global slow_query_log=on;
set global long_query_time=3;

注意,在通过环境变量开启慢日志时,slow_query_log针对当前登录的连接实时生效,而long_query_time针对当前连接并不生效,是针对新增的连接有效,如需启用修改后的变量值,需要重新连接MySQL。

查看慢查询日志

慢日志是以文本文件的形式存储内容,所以可以直接用文本工具查看。

分析慢查询日志

MySQL提供了对应的工具用于分析MySQL慢查询日志的内容,对应的工具是mysqldumpslow.pl
-s 为分析慢查询日志时指定排序参数,可选的是al表示平均锁定时间,ar表示平均返回记录数,at表示平均查询时间

-t 参数表示只显示指定的行数

停止慢查询日志

一种方式可以通过my.ini配置

[mysqld]
#log-slow-queries[=dir\[filename]]
#log_query_time=n

通过上述方法停止慢查询日志,此时需要重启MySQL服务器。

另外设置slow_query_log为关闭状态可以停止该日志

set global slow_query_log=off;

删除慢查询日志

mysqladmin -u root -p flush-logs

执行上述命令,MySQL服务器会创建一个新的慢查询日志,此时慢查询日志内容为空。

你可能感兴趣的:(mysql,数据库)