MySQL日志【查询日志】【慢查询日志】

01. 查询日志

查询日志记录了客户端的所有语句,而二进制日志不包含只查询数据的语句。

01. 日志的位置和格式

查询日志慢查询日志都可以选择保存在文件或表中,并使用参数 --log-output[=value,…]来进行控制,value值可以是table、file、none的一个或者多个组合,中间用逗号进行分割,分别表示日志保存在表,文件,不保存在表和文件中,这里的表指的是mysql库中的general_log(慢查询日志是slow_log)表。其中none优先级最高,比如 --log_output =table,file表示同时可以输出到表和文件中,而 --log_output=table,none,表示不保存在表和文件中。如果不显式设置此参数,则默认输出到文件(mysql 5.5 之前的版本输出到表中的代价较高)。

如果要启用查询日志,可以通过参数 --general_log[={0|1}] 和 --general_log_file=file_name来进行控制。前者控制是否启用日志,后者控制日志文件的输出路径。 --general_log 设置为1或者不带值都可以启用查询日志,设置为0则关闭查询日志,如果不指定此参数也不会启用查询日志。如果没有指定 --general_log_file=file_name的值,且没有显式设置 --log_output[=value,…] 参数,那么日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是 host_name.log。这个两个参数都是global类型,可以在系统启动时和运行时动态修改,如果想在session级别控制日志是否被记录,则通过在session中设置参数 sql_log_off为on或off来进行控制。

02. 日志的读取

查询日志的格式是纯文本,可以直接读取。

cat localhost.log

注意:log日志中记录了所有数据库的操作,对于频繁访问的系统,此日志对系统的影响较大,建议一般情况下关闭。

02. 慢查询日志

慢查询日志记录了所有执行时间超过参数 long_query_time (单位:秒)设置值并且扫描记录数不小于 min_examined_row_limit 的所有sql语句日志(注意,获得表锁定的时间不算作执行时间)。 long_query_time 默认为10秒,最小为0,精度可以到微妙。

在默认情况下,有两类常见语句不会记录到慢查询日志:管理语句不使用索引进行查询的语句。这里的管理语句包括:alter table、analyze table、check table、create index、drop index、optimize table、repair table。如果要监控着两类sql语句,可以分别使用 --log_slow_admin_statements 和 log_queries_not_using_indexes 进行控制。

01. 文件位置和格式

慢查询日志默认是关闭的。在 mysql 5.1版本之前,当用 --log_slow_queries[=file_name]选项启动时,慢查询日志开始被记录。如果没有给定 file_name 的值,日志将写入DATADIR(数据目录)指定的路径下,默认文件名是 host_name-slow.log 。

在mysql 5.1版本之后,--log_slow_queries 已经不推荐使用。采用两个新的参数来替换:使用 --log_query_log[=0|1] 显式指定慢查询的状态,如果不指定值或者指定值为1都会打开慢查询。使用 slow_query_log_file[=file_name] 来指定慢查询日志的路径。也可以使用 --log_output 参数来指定日志的输出方式,默认会输出到文件,当然也会选择输出到表,需要注意的是,如果选择输出到表,则表中的慢查询日志时间只能精确到秒,而文件中可以精确到微妙。

02. 日志的读取

慢查询日志的格式也是纯文本,可以直接被读取。

mysql> show variables like "long%";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql> show variables like "slow_query_log";
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "slow_query_log_file";
+---------------------+---------------------------+
| Variable_name       | Value                     |
+---------------------+---------------------------+
| slow_query_log_file | /data/mysql/logs/slow.log |
+---------------------+---------------------------+
1 row in set (0.00 sec)

mysql> show variables like "log_output";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+

cat /data/mysql/logs/slow.log
select time_format(query_time,'%f') time,sql_text from slow_log where sql_text='具体的sql语句';

如果慢查询日志记录内容很多,可以使用 mysqldumpslow工具来对慢查询日志进行分类汇总。

mysqldumpslow /data/mysql/logs/slow.log

变量不同的语句,自动视为同一个语句进行统计,变量值用N来代替。这个统计结果大大增加阅读慢日志的效率,并迅速定位系统的sql瓶颈(建议正常情况下打开慢日志记录)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值