MySQL日志文件之查询日志和慢查询日志详解

  •   
  • 2731
  • MySQL
  • 0
  • super_dodo
  • 2018/07/16

今早被一个开发妹纸鄙视了,说我们之前的项目里面很多查询直接裸奔(没用到索引或没建索引).其实被人质疑也是一件很正常的事情,人非圣贤孰能无过,但是我们是搬砖工,为了大厦的健康,必须要事无巨细,审查到底。

虽然有些自负,但是先承认着错误,毕竟是自己的孩子,自己亲手建造的工程。接下来开始在测试环境对MySQL的所有语句进行一次大排查(虽然看上去有点治标不治本)。其实之前也实际使用过这些功能,时间久了,算是温故而知新吧。

因为功能板块比较多,我们就先从MySQL的日志文件入手(查询日志和慢查询日志)

MySQL日志分类:日志文件记录了影响数据库的各种类型活动,MySQL数据库常见的日志文件分类。
错误日志(Error log)
慢查询日志(Slow query log)
二进制日志
查询日志

MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息。

查询日志(执行过的SQL语句):因为这个的查询语句很多,会影响到系统的性能,而且时间久了,记录的日志也很大,占用服务器的资源过多,建议阶段性的开启,问题排查后,及时的关闭,线上生产环境不建议开启。(如下图)

#查看查询日志的开启情况和查询日志的存储地方
SHOW VARIABLES LIKE 'general%';

#general_log:日志功能是否开启,默认关闭OFF
#general_log_file:日志文件保存位置

#开启查询日志
SET GLOBAL general_log='ON';


#关闭查询日志
SET GLOBAL general_log='OFF';

#开启和关闭正常情况下不需要重启MySQL服务(看情况重启MySQL服务 service mysqld restart)

#开启之后就可以观察(tail -f /usr/local/mysql/data/localhost.log )

mysql_log

MySQL的慢日志:


#查看查询日志的开启情况和查询日志的存储地方
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';

+---------------------------+--------------------------------------------+
| Variable_name             | Value                                      |
+---------------------------+--------------------------------------------+
| slow_query_log            | OFF                                        |
| slow_query_log_file       | /usr/local/mysql/data/localhost-slow.log   |
+---------------------------+--------------------------------------------+

#slow_query_log 慢查询开启状态
#slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
#long_query_time 查询超过多少秒才记录(默认10秒)


#开启慢查询日志
SET GLOBAL slow_query_log='ON';

#如果想更改慢日志的存储地方的话(读写权限)
set GLOBAL slow_query_log_file='/usr/local/mysql/data/dodo-slow.log';

#查询超过1秒就记录
set GLOBA long_query_time=1;

#关闭查询日志
SET GLOBAL general_log='OFF';

#开启和关闭正常情况下不需要重启MySQL服务(看情况重启MySQL服务  service mysqld restart) 

#开启之后就可以观察(tail -f /usr/local/mysql/data/localhost-slow.log )


#执行一条慢查询SQL语句
select sleep(2);

不要给自己找客观的理由,你没做好,就是没做好,责无旁贷。什么工期紧张,什么需求变动,什么快速迭代,什么没做优化沉淀,什么疏忽遗漏,什么数据量小,那都不是事,不是自己摆脱罪名的借口和聊以慰藉的狗皮膏药。

不要为自己的懒惰和庸碌找借口了。加油吧,你是最菜的。

——我的人生是一栋只能建造一次的楼房,我必须让他精确无比,不能有一厘米差池——所以,我太紧张,害怕行差步错。 
——任何一栋建筑都允许存在合理范围内的误差,我这一厘米不足以让你的大楼崩塌。

-----为毛我突然想到了这个#陈孝正#

随后阿里云发表了一篇故障说明,说明中阿里云表示:对于这次故障,没有借口,我们不能也不该出现这样的失误!我们将认真复盘改进自动化运维技术和发布验证流程,敬畏每一行代码,敬畏每一份托付。