MySQL查询日志介绍

MySQL的查询日志记录了所有MySQL数据库请求的信息。无论这些请求是否得到了正确的执行。默认文件名为hostname.log。默认情况下MySQL查询日志是关闭的。生产环境,如果开启MySQL查询日志,对性能还是有蛮大的影响的。另外很多时候,MySQL慢查询日志基本可以定位那些出现性能问题的SQL,所以MySQL查询日志应用的场景其实不多,有点鸡肋的感觉,它跟SQL Server中的profiler有点类似,但是这个不能跟踪某个会话、用户、客户端。它只能对整个数据库进行跟踪。MySQL查询日志本身比较简单,网上介绍的不多,官方资料也就那么短短一篇。

MySQL查询日志配置

MySQL中的参数general_log用来控制开启、关闭MySQL查询日志,参数general_log_file用来控制查询日志的位置。所以如果你要判断MySQL数据库是否开启了查询日志,可以使用下面命令。general_log为ON表示开启查询日志,OFF表示关闭查询日志。

mysql> show variables like '%general_log%';

+------------------+------------------------------+

| Variable_name    | Value                        |

+------------------+------------------------------+

| general_log      | OFF                          |

| general_log_file | /var/lib/mysql/DB-Server.log |

+------------------+------------------------------+

2 rows in set (0.00 sec)

mysql>

另外,MySQL的查询日志支持写入文件或写入数据表两种形式,这个由参数log_output控制,如下所示:

mysql> show variables like 'log_output';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | FILE  |

+---------------+-------+

1 row in set (0.00 sec)

mysql>

这三个参数general_log、 general_log_file、 log_output都是动态参数,可以随时动态修改。

1、开启MySQL查询日志

mysql> set global general_log = on;

Query OK, 0 rows affected (0.11 sec)

mysql> show variables like 'general_log';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| general_log   | ON    |

+---------------+-------+

1 row in set (0.02 sec)

mysql>

2:关闭MySQL查询日志

mysql> show variables like 'general_log';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| general_log   | ON    |

+---------------+-------+

1 row in set (0.01 sec)

mysql> set global general_log=off;

Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'general_log';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| general_log   | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

mysql>

3:设置日志输出方式为表(如果设置log_output=table的话,则日志结果会记录到名为gengera_log的表中,这表的默认引擎是CSV):

mysql> show variables like 'log_output';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | FILE  |

+---------------+-------+

1 row in set (0.00 sec)

mysql> set global log_output='table';

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'log_output';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output    | TABLE |

+---------------+-------+

1 row in set (0.01 sec)

mysql>

查看查询日志信息。

mysql> select * from mysql.general_log;

+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+

| event_time          | user_host                 | thread_id | server_id | command_type | argument                         |

+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+

| 2017-07-06 12:32:05 | root[root] @ localhost [] |         1 |         1 | Query        | show variables like 'general%'   |

| 2017-07-06 12:32:28 | root[root] @ localhost [] |         1 |         1 | Query        | show variables like 'log_output' |

| 2017-07-06 12:32:41 | root[root] @ localhost [] |         1 |         1 | Query        | select * from MyDB.test          |

| 2017-07-06 12:34:36 | [root] @ localhost []     |         3 |         1 | Connect      | root@localhost on                |

| 2017-07-06 12:34:36 | root[root] @ localhost [] |         3 |         1 | Query        | KILL QUERY 1                     |

| 2017-07-06 12:34:36 | root[root] @ localhost [] |         3 |         1 | Quit         |                                  |

| 2017-07-06 12:34:51 | root[root] @ localhost [] |         1 |         1 | Query        | select * from mysql.general_log  |

+---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+

7 rows in set (0.02 sec)

mysql>

4: 查询日志归档

mysql> system mv /var/lib/mysql/DB-Server.log  /var/lib/mysql/DB-Server.log.20170706

mysql> system mysqladmin flush-logs -p

Enter password:

或者你在shell中执行下面命令

[root@DB-Server mysql]# mv /var/lib/mysql/DB-Server.log  /var/lib/mysql/DB-Server.log.20170706

[root@DB-Server mysql]# mysqladmin flush-logs -p

Enter password:

5: 修改查询日志名称或位置

mysql> show variables like 'general_log%';

+------------------+------------------------------+

| Variable_name    | Value                        |

+------------------+------------------------------+

| general_log      | ON                           |

| general_log_file | /var/lib/mysql/DB-Server.log |

+------------------+------------------------------+

2 rows in set (0.00 sec)

mysql> set global general_log='OFF';

Query OK, 0 rows affected (0.00 sec)

mysql> set global general_log_file='/u02/mysql_log.log';

Query OK, 0 rows affected (0.00 sec)

mysql> set global general_log='ON';

Query OK, 0 rows affected (0.02 sec)

如果你遇到下面类似问题,这个是因为权限问题导致。

mysql> set global general_log_file='/u02/mysql_log.log';

ERROR 1231 (42000): Variable 'general_log_file' can't be set to the value of '/u02/mysql_log.log'

将对应目录的owner修改为mysql即可解决问题。如下所示:

[root@DB-Server u02]# chown -R mysql:mysql  /u02

另外,MySQL的查询日志记录了所有MySQL数据库请求的信息。无论这些请求是否得到了正确的执行。这个就是即使我查询一个不存在的表的SQL,查询日志依然会记录。如下测试所示:

mysql> select * from MyDB.test1;

ERROR 1146 (42S02): Table 'MyDB.test1' doesn't exist

mysql> select * from MyDB.test2;

+-------+------+

| id    | sex  |

+-------+------+

| 10001 |      |

| 10002 |      |

| 10003 |     |

+-------+------+

3 rows in set (0.07 sec)

mysql> select * from MyDB.kkk;

ERROR 1146 (42S02): Table 'MyDB.kkk' doesn't exist

mysql>

MySQL查询日志的应用场景

存在即是合理,既然MySQL提供了查询日志,那么肯定有其应用的地方。比如,我就遇到这样一个例子,前阵子碰到别人问mysqlslap压力测试工具中参数的问题,问题如下:

-c, --concurrency=nameNumber of clients to simulate for query to run.

--number-of-queries=#Limiteachclienttothisnumberofqueries(thisisnotexact).

比如我指定:--concurrency=50--number-of-queries=100, 那么这次测试总的sql执行次数是=100还是50*100=5000 ?

我们不知道--number-of-queries这个参数代表所有客户端的执行次数还是每一个客户端的执行次数,这些英文如果看得不是太明白,那么我们就动手测试一下,这个时候MySQL查询日志就能发挥其用武之地了。

[root@DB-Server u02]# mysqlslap -u root -p --concurrency=50 --create-schema='MyDB'  --query='select * from MyDB.test2'  --number-of-queries=100;

Enter password:

Benchmark

Average number of seconds to run all queries: 0.023 seconds

Minimum number of seconds to run all queries: 0.023 seconds

Maximum number of seconds to run all queries: 0.023 seconds

Number of clients running queries: 50

Average number of queries per client: 2

如下所示,我们可以查到这个SQL总共执行了100次,也就是说number-of-queries代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。--concurrency表示并发量,也就是模拟多少个客户端同时执行select。如果你指定--number-of-queries=100,--concurrency=50测试总的SQL执行应该是100

mysql日志查询指令_MySQL查询日志总结相关推荐

  1. mysql配置日志老化配置_mysql中日志的配置与分析

    默认情况下,如果日志没有配置,则只记录错误日志,记录到syslog,配置文件 /etc/mysql/conf.d/mysqld_safe_syslog.cnf (ubuntu下) [mysqld_sa ...

  2. mysql 二进制日志详解_Mysql二进制日志详解

    引言 注:图片取自网络 提一下比较重要的几个: 重做日志(Redo Log):重做日志是实现mysql事务的持久性的原理之一,当新增数据时,Redo Log会备份新数据,在事务提交前,只要持久化Red ...

  3. mysql二进制日志内容说明_MySQL二进制日志相关问题详细说明

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  4. mysql 获取昨天凌晨_MySQL慢日志体系建设

    慢查询日志是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的SQL语句,在很大程度上会影响数据库整体的性能,是MySQL优化的一个重要方向.在58的云DB平台建设中,慢SQL系统 ...

  5. mysql 数据库日志管理工具_mysql mysqlbinlog日志管理工具使用教程

    一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...

  6. mysql日志文件名字_MySQL各类日志文件相关变量介绍

    文章转自:http://www.ywnds.com/?p=3721 查询所有日志的变量 1 mysql>show global variables like'%log%'; GLOBAL表示查全 ...

  7. mysql的报错日志哪里看_mysql错误日志

    ### 错误日志是非常有用的东西,在上一篇 mysql字符集 中,因为看了网上很多博客,修改字符集的时候,在服务端` [mysqld]`下添加的变量内容为(博客里写的是这个变量,有很多博客都这样写,可 ...

  8. mysql 错误日志 占用硬盘_MySQL慢日志占满磁盘空间导致业务主库宕机解决

    在MySQL的日常维护中,我们总会遇到这样或那样的问题,对于那些经常发生且有处理经验的事故,不论是新手还是老司机都能在故障规定的容错时间内解决.而对于那些不常见.比较棘手的问题,新手上路可能就显得举足 ...

  9. mysql 最多查询数据库_mysql 查询全表某字段值最大的10条数据

    展开全部 select * from 表 order by 要最大值的字段 desc limit 0,10 FILE: 在MySQL服务器上读写文件.62616964757a686964616fe59 ...

最新文章

  1. 网络推广——网络推广专员是如何进行图像优化的?
  2. React Router 黑笔记?
  3. 【PC工具】更新在线流程图绘制工具bullmind,免费云存储流程图绘制,可直接粘贴图片...
  4. 机器学习基础-集成学习-13
  5. server如何调用 thrift_Thrift总结(二)如何快速创建自己的RPC服务
  6. perl大骆驼和小骆驼_骆驼路线的主/从故障转移
  7. 使用管控策略,设定多账号组织全局访问边界
  8. C++ memset()函数和bzero()函数
  9. CF235C Cyclical Quest
  10. python练习-prat1
  11. 如何写出更具有Python风格的代码
  12. 502粘到手上变硬了怎么办_手指被502粘住了?别硬扯,教你2招,胶水自动融化...
  13. 实现PPT的在线预览(动态,及转PDF)
  14. selenium+python登录新浪微博
  15. 狂野之刃服务器微信群,魔兽世界怀旧服狂野之刃 狂野之刃获取方法
  16. C++ 数据结构之栈stack (henu.hjy)
  17. 误删的文件,回收站没有怎么恢复?
  18. JAVA中用流进行文件分割
  19. 安装西门子博图一直重启_博图软件更新安装老是提示重启,咋解决啊-工业支持中心-西门子中国...
  20. OSChina 周六乱弹 —— 这是我的新秘书想看吧

热门文章

  1. DVWA Cross Site Request Forgery (CSRF) -------WP
  2. java running_Running
  3. 计算机主机温度,计算机的理想工作温度和湿度分别是多少
  4. html json to table,javascript - HTML - Convert json to table - Stack Overflow
  5. 加工中心刻字宏程序_FANUC OI系列图书——车床、铣床及加工中心编程
  6. MIP 扩展组件开发手册
  7. QML Profiler性能优化教程
  8. 权限组件(6):权限分配的角色管理
  9. [译]Kube Router Documentation
  10. Spring第三篇【Core模块之对象依赖】