十八、MySQL-数据库管理
第4关:查看日志文件
任务描述
某大型电商网站在某次大型推广时段遇到了不能访问和速度很慢的错误,运维经理推测经过初步分析,要求你立即利用MySQL5.5的日志文件功能进行问题定位。
本关任务:
掌握错误日志、慢查询日志和常规查询日志的使用方式
相关知识
如果你的学习能力较强,或者有兴趣深入了解MySQL5.5的日志文件,我们推荐你去看MySQL5.5的官方手册:
https://dev.mysql.com/doc/refman/5.5/en/server-logs.html
本关中我们只选择最常用的日志文件进行讲解。
MySQL5.5中提供一下日志来记录数据库的相关活动:
日志类型 写入日志的信息
错误日志(Error log) 在启动,运行或停止mysqld时遇到的问题
常规查询日志(General query log) 建立了客户的客户关系和声明
二进制日志(Binary log) 改变数据的语句(也用于复制)
中继日志(Relay log) 从复制主服务器接收的数据更改
慢查询日志(Slow query log) 查询花费了超过 long_query_time几秒的时间执行
DDL日志(元数据日志) 元数据操作由DDL语句执行
背景介绍
我们首先在右侧命令行使用命令
mysql -uroot -p123123 -h127.0.0.1登陆数据库,然后使用以下SQL语句查询日志启用情况:
SHOW VARIABLES LIKE "log_%";
执行效果如下图

从图中我们可以看到只有错误日志被默认启动,错误日志存储位置为/var/log/mysql/error.log。图中的log_output是日志文件输出选项,选项的值代表MySQL5.5存储日志文件的方式,可以使用以下SQL语句设置日志文件存储方式:
SET GLOBAL log_output="option";
具体语义说明:
option参数有3个值,分别是FILE,TABLE,FILE,TABLE;
FILE代表以文件形式存储,TABLE代表以数据表形式存储,FILE,TABLE代表以文件和数据表两种形式都进行存储。
错误日志
错误日志包含mysqld启动和关闭时间的记录。它还包含诊断消息,如服务器启动和关闭期间以及服务器运行期间发生的错误,警告和注释。
错误日志只支持以文件的形式存储,其存放位置可以通过以下命令查看
SHOW VARIABLES LIKE "%log_error%";
执行效果如下图

更改错误日志文件的存储位置或者名字都可以通过修改MySQL5.5配置文件实现,在右侧命令行环境中MySQL5.5配置文件存放位置为/etc/mysql/my.cnf,修改位置如下图

修改之后必须重启数据库,Linux或Ubuntu环境的重启命令如下
service mysql restart
/etc/init.d/mysql restart
慢查询日志
慢查询日志由SQL语句组成,这些SQL语句花费了超过long_query_time几秒的时间才能执行,在管理网站时如果网站性能突然下降,可以开启慢查询日志查看哪些操作使性能下降。
默认情况下,慢查询日志没有被启动,可通过以下SQL命令启动:
SET GLOBAL log_slow_queries="ON";
【注意】:通过以上语句设置后,在MySQL5.5服务重启后会失效,如果想永久生效,则需要修改MySQL5.5配置文件。
查看慢查询日志是否启动、日志文件存放位置,可以使用以下命令:
SHOW VARIABLES LIKE '%slow_query_log%';
执行效果如下图

long_query_time参数在MySQL5.5中默认设置为10秒,其精度为微秒(10的负6次方),查看可以使用命令:
SHOW VARIABLES LIKE "long_query_time";
默认效果如下图

设置long_query_time参数可以使用命令:
SET GLOBAL long_query_time=秒数;
秒数为要设置的秒数,直接写数字
应用示例(1) :
SET GLOBAL long_query_time=5;
SHOW VARIABLES LIKE "long_query_time";
SHOW GLOBAL VARIABLES LIKE "long_query_time";
执行效果如下图

虽然改变了long_query_time的值,但是使用SHOW VARIABLES命令查看并没有改变,这是因为SHOW VARIABLES命令查看的是本次连接的变量,而SHOW GLOBAL VARIABLES变量查看的是全局变量。
【注意】:虽然全局的long_query_time参数值已经被改变,但是对于本次连接并不生效,必须重新连接才会生效。
应用示例(2) :
SET GLOBAL log_output="TABLE";
SET GLOBAL log_slow_queries="ON";
SELECT SLEEP(15);
SELECT * FROM mysql.slow_log;
首先将日志输出方式设置为数据表,即TABLE;
然后启动慢查询日志;
利用SLEEP函数执行一个慢查询;
mysql.slow_log数据表是慢查询日志存储的位置。
执行效果如下图

从图中可以看到慢查询日志记录的信息非常详细,包括完整的查询语句。启动慢查询日志会对数据库性能有一定的影响。
常规查询日志
常规查询日志是数据库正在做什么的一般记录。服务器在客户端连接或断开连接时将信息写入此日志,并记录从客户端接收到的每条SQL语句。
默认情况下,常规查询日志没有被启动,可通过以下SQL命令启动:
SET GLOBAL general_log="ON";
【注意】:通过以上语句设置后,在MySQL5.5服务重启后会失效,如果想永久生效,则需要修改MySQL5.5配置文件。
查看慢查询日志是否启动、日志文件存放位置,可以使用以下命令:
SHOW VARIABLES LIKE '%general_log%';
执行效果如下图

应用示例 :
SET GLOBAL log_output="TABLE";
SET GLOBAL general_log="ON";
SHOW databases;
SELECT * FROM mysql.general_log;
首先将日志输出方式设置为数据表,即TABLE;
然后启动常规查询日志;
执行一条SQL语句;
mysql.general_log数据表是常规查询日志存储的位置。
执行效果如下图

从图中我们可以看出,启动常规查询日志后,所有的SQL语句都被记录下来。启动常规查询日志对数据库性能的影响更大,所以一般只在怀疑客户端产生错误操作、想知道客户端到底进行了哪些操作时才启用。
编程要求
为了找到使网站性能变慢的操作,请你首先完成以下设置:
将日志输出方式设置为文件和数据表都使用;
修改慢查询参数long_query_time为8秒;
【注意】:
用root用户身份登陆
测试说明
我们已经登录了MySQL,你只需要在右侧代码窗口输入MySQL语句实现以上操作,平台将自动编译你输入的MySQL语句。请注意语句的格式!请不要删去注释信息!
成功通关后预计输出:
success-输出设置成功
success-慢查询参数设置成功
业精于勤,荒于嬉。行成于思,毁于随。------韩愈

开始你的任务吧,祝你成功!
如果你觉得这一关的内容对你有帮助,请你在下面点赞。

//请在下面输入将日志输出方式设置为文件和数据表都使用的MySQL语句
/*********begin*********/
SET GLOBAL log_output="FILE,TABLE";
/********* end *********/
//请在下面输入修改慢查询参数long_query_time为8秒的MySQL语句
/*********begin*********/
SET GLOBAL long_query_time=8;
/********* end *********/
有任何问题都可以随时关注私信!