mysql日志

日志文件

日志文件记录mysql数据库的各种类型活动。常用日志有:错误日志、查询日志、慢查询日志、二进制日志。

错误日志

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

定位错误日志文件位置:

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';

配置:

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 |

注意两点:

  • 设置阀值后,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/ |
+---------------+-----------------+

posted @ 2019-08-02 14:15  walkingSun  阅读(232)  评论(0编辑  收藏  举报
**/