日志操作是数据库维护中最重要的手段之一,由于日志文件会记录MySQL服务器的各种信息,所以当MySQL服务器遭到意外的损害时,
不仅可以通过日志文件来查看出错的原因,而且还可以通过日志文件进行数据恢复。
在MySQL所支持的日志文件里,除了二进制日志文件外,其他日志文件都是文本文件。默认情况下,MySQL软件只会启动错误日志文件,
而其他日志文件则需要手动启动才可以被启动。
默认情况下,二进制日志是关闭的,如果想启动二进制日志,可以通过设置MySQL服务器的配置文件my.ini来实现
[mysqld]
log-bin[=dir\filename]
在具体启动二进制日志时,如果没有设置参数dir和filename,二进制日志文件将使用默认名字主机名-bin.number,保存到默认目录-数据库数据文件里。
如果需要查看二进制日志,需要通过执行命令mysqlbinlog
命令来实现
mysqlbinlog filename.number
如果想要停止二进制日志功能,只需要删除[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%'
由于通过查询日志是以文本形式的形式存储内容,所以可以直接用文本文具看。
一种可以通过配置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服务器会创建一个新的慢查询日志,此时慢查询日志内容为空。