mysql日志

日志文件

日志文件记录mysql数据库的各类类型活动。经常使用日志有:错误日志、查询日志、慢查询日志、二进制日志。正则表达式

错误日志

错误日志文件对mysql的启动、运行、关闭过程进行了记录。sql

定位错误日志文件位置:shell

mysql> show variables like 'log_error';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| log_error     | stderr |
+---------------+--------+
# stderr 表明错误输出;可在my.conf 设置log_error的存贮路径,如log_error = /data/mysql/mysql-error.log

当mysql数据库不能正常启动时,第一个必须查找的文件就是错误日志文件,该文件记录了出错信息。数据库

慢查询日志

慢查询能为SQL语句的优化带来很好的帮助。优化

能够设一个阀值,将运行时间超过改制的全部SQL语句都记录到慢查询日志文件中。该阀值能够经过参数long_query_time来设置,默认值
为10,表明10秒。日志

show VARIABLES like '%long%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
SHOW variables like 'log_slow_queries';

配置:code

slow_query_log = 1     # 开启慢查询日志
long_query_time = 10   # 阀值时间,默认10秒
slow_query_log_file = /data/mysql/mysql-slow.log  # 慢查询日志存贮位置
log-queries-not-using-indexes = on # 记录没有使用索引的query
show VARIABLES like '%slow_query%';
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| slow_query_log      | ON                              |
| slow_query_log_file | /var/lib/mysql/msmaster-slow.log |

注意两点:server

  • 设置阀值后,mysql会记录运行时间超过该值的全部SQl语句,但对于运行时间正好等于阀值的状况并不会记录。即源代码里是判断大于long_query_time,而非大于等于。
  • log-queries-not-using-indexes 记录没有使用索引的query

mysqldumpslow
随着mysql运行时间累积,慢查询日志文件会愈来愈大,此时分析文件就显得不容易了。mysql提供mysqldumpslow命令:排序

$ /usr/bin/mysqldumpslow /var/lib/mysql/msmaster-slow.log
Reading mysql slow query log from /var/lib/mysql/msmaster-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts

#  -s,排序,c,t,l,r以及ac,at,al,ar分别是按照query次数,时间,lock时间,返回记录排序。加a就是倒序。
#  -t,top n,跟上数字就是算出top多少条
#  -g,跟正则表达式。

$ /usr/bin/mysqldumpslow -s al -n 10  /var/lib/mysql/msmaster-slow.log; # 查询锁定最长的10条sql语句;

mysql5.1开始能够将慢查询的日志记录放入一张表中,查询更加直观。慢查询表在mysql中名为slow_log。

mysql> SHOW CREATE TABLE mysql.slow_log;
*************************** 1. row ***************************
Create Table: CREATE TABLE `slow_log` (
  `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `user_host` mediumtext NOT NULL,
  `query_time` time(6) NOT NULL,
  `lock_time` time(6) NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumblob NOT NULL,
    `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'

参数log_output指定慢查询输出格式,默认FILE,能够修改成TABLE,而后就能够查询slow_log表了。

mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

查询日志

查询日志记录全部对mysql数据库请求的信息,不论这些请求是否获得正确的执行。默认文件名:主机名.log。

查询日志甚至记录了对access denied的请求。从mysql5.1开始,能够将查询日志的记录放入mysql库中的general_log表中,用法与slow_log同样。

二进制日志

二进制日志记录了对数据库执行更改的全部操做,不包括select和show操做。二进制还包含了执行数据库更改操做的时间和执行时间等信息。

主要做用:

  • 恢复:某些数据的恢复须要二进制日志。
  • 复制

经过配置参数log-bin[=name]启动二进制日志。若是不指定name,默认以主机名,后缀为二进制日志额序列号,所在路径为数据库所在目录(datadir);

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
相关文章
相关标签/搜索