2.1 功能
MySQL的慢查询日志是 MySQL 提供的一种日志记录,
它用来记录在 MySQL 中响应时间超过阀值的语句,
具体指 运行时间超过 long_query_time 的值的 SQL ,则会被记录到慢查询日志中。
mysql> show variables like ‘%long_query_time%’;
long_query_time 的默认值为 10,意思是运行 10S 以上的语句。
默认情况下,Mysql 数据库并不启动慢查询日志,
需要我们手动来设置这个参数,
当然,如果不是调优需要的话,一般不建议启动该参数,
因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
2.2 慢查询日志开启
关于慢查询日志,主要涉及到下面几个参数:
slow_query_log :是否开启慢查询日志功能(必填)
slow_query_log_file:慢查询日志文件及位置
long_query_time :超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填)
也就是说,只有满足以上三个条件,“慢查询功能”才可能正确开启。
mysql> show variables like ‘%slow_%’;
mysql> set global slow_query_log=1;
mysql> show variables like ‘%slow_%’;
show variables like ‘%slow_query_log_file%’;
参数文件修改如下:
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
重启MySQL服务service mysqld restart即可
2.3 清除慢查询日志
select * from performance_schema.global_variables where variable_name in
(‘slow_query_log’,‘log_output’,‘slow_query_log_file’,‘long_query_time’)
SET GLOBAL slow_query_log = ‘OFF’;
mysql> flush slow logs;
2.4 慢查询写到表里
– log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE
mysql> show variables like ‘%log_output%’;
#默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE
mysql> set global log_output = ‘FILE’;
mysql> set global log_output = ‘TABLE’;
无法直接删除,如果直接删除的话,
会出现“ERROR 1556 (HY000): You can’t use locks with log tables.”的错误提示
SET GLOBAL slow_query_log = ‘OFF’;
RENAME TABLE slow_log TO slow_log_temp;
DELETE FROM slow_log_temp WHERE start_time < DATE(NOW());
RENAME TABLE slow_log_temp TO slow_log;
SET GLOBAL slow_query_log = ‘ON’;
3.全查询日志
全查询日志记录了所有对数据库请求的信息,
正确的 SQL才会被记录下来(错误写法的 SQL 语句不会记录),
包括 show、查询 select 语句、权限不足的语句(ERROR 1044 (42000): Access denied for user)。默认位置在变量 datadir 下,默认文件名为:主机名.log。
MySQL 的通用查询日志默认情况下是不开启的,当需要进行采样分析时手工开启
mysql> show variables like ‘general_log’;
mysql> show variables like ‘%general_log_file%’;
3.1 日志开启
mysql> SET GLOBAL general_log=1;
mysql> show variables like ‘general_log’;
默认名称为:变量 datadir 下:主机名.log
查询日志记录查询语句与启动时间,建议不是在调试环境下不要开启查询日志,
因为会不断占据你的磁盘空间,并会产生大量的 IO。
3.2 日志清理
##log清理
SET GLOBAL general_log = ‘OFF’;
[root@jeames data]# mv jeames.log jeames_old.log
mysql> flush general logs;
##如果你的日志是写到表里的,则通过以下方法
SET GLOBAL general_log = ‘OFF’;
RENAME TABLE general_log TO general_log_temp;
DELETE FROM general_log_temp WHERE event_time < DATE(NOW());
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = ‘ON’;
4.二进制日志
Binlog是MySQL中一个很重要的日志,记录了对数据库进行变更的操作,
但是不包括 select操作以及 show 操作,因为这类操作对数据库本身没有没有修改。
如果想记录 select和 show 的话,那就需要开启全查询日志。
另外 binlog 还包括了执行数据库更改操作时间和执行时间等信息。
binlog 是 MySQL Server 层记录的二进制日志文件,逻辑层面