mysql日志查询指令_MySQL查询日志总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp5.0助手函数占用服务器资源

db(user) 默认情况下,每次请求都会重新连接数据库,这样会占用服务器资源 方法1.如果不想每次都重连可以这样 db("List",[],false) 方法2.还可以直接改function,及则需要把 function db($name , $config [], $force true){retu…

python 无符号整数_Python中的有符号和无符号整数数组

python 无符号整数An array can be declared by using "array" module in Python. 可以通过在Python中使用“数组”模块来声明数组 。 Syntax to import "array" module: 导入“数组”模块的语法: import array as array_alias_nameHere, imp…

mysql快速批量入库_MySQL-批量入库优化

MySQL批量入库的方式循环一条一条入库批量入库通过程序组合 insert into (字段) tbl vlaues(), vlaues(), vlaues(),...事务入库$autoCommit (isset($this->startTransaction) ? !$this->startTransaction : true);$ids array();if ($autoCommit) {$this->startTra…

docker集群搭建(k8s)

1 . 理解: Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新&#xff0c…

Python模拟删除字符串两边的空白

目标:   1.使用string模块的whitespace   2.删除左边、右边以及两边的空白 代码如下: [rootlocalhost python]# cat rmspace.py #!/usr/bin/env python #coding:utf8 """ 使用字符串删除左右两端的空白。 """from str…

xml分析错误:注释未终止_错误:C中的未终止注释(无效的注释块) 常见的C程序错误...

xml分析错误:注释未终止Comments are used to write logic explain or anything that you do not want to compile. In C language there are two types of comments 1) Single line comment and 2) Multi-line comment. 注释用于编写逻辑解释或您不想编译的任何内容。 在C语言…

查看 mysql 状态_查看mysql状态的常用命令

在mysql客户端输入"show status"之后将会看到如下输出:如果想要查看某个具体的值,可以使用如下命令:show status LIKE "%具体变量%";Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量.A…

常用数学符号的读法及其含义

2019独角兽企业重金招聘Python工程师标准>>> 常用数学符号的读法及其含义 近来发现很多学生对一些数学符号的读法及其含义不是很清楚。今天特把一些常用的列表如下。希望能够提供一些帮助! 大写 小写 英文注音 国际音标注音 中文注音 Α…

math.atan_JavaScript中带有示例的Math.atan()方法

math.atanJavaScript | Math.atan()方法 (JavaScript | Math.atan() Method) Math.atan() is a function in math library of JavaScript that is used to find the value of arctangent of a number. Math.atan()是JavaScript数学库中的函数,用于查找数字的反正切值…

mysql 计算工作日_mysql计算工作日_MySQL

bitsCN.commysql计算工作日Sql代码 DELIMITER $$ drop procedure if exists pGetWorkDays$$ create procedure pGetWorkDays(s datetime,e datetime) begin select floor(days/7)*5days%7 -case when 6 between wd and wddays%7-1 then 1 else 0 end -case when 7 between wd a…

后端码农谈前端(HTML篇)第三课:常见属性

一、HTML全局属性 1、核心属性 属性描述id设置元素的唯一 id。class设置元素的一个或多个类名(引用样式表中的类)。style设置元素的行内样式(CSS内联样式)。title设置有关元素的额外信息(可在工具提示中显示&#xff0…

mysql数据库的服务无法启动_mysql5数据库服务无法启动

mysql5数据库服务无法启动我最近安装了MySQL 5.0 Community Edition因为听很多人介绍,mysql开源,免费,速度快,于是终于按捺不住,尝试一下。谁知这一尝试,噩梦就来了。[安装环境]windows xp sp2MySQL 5.0 Co…

math.asin_JavaScript中带有示例的Math.asin()方法

math.asinJavaScript | Math.asin()方法 (JavaScript | Math.asin() Method) Math.asin() is a function in math library of JavaScript that is used to find the value of arcsine of a number and return the value in radians. Math.asin()是JavaScript数学库中的函数&…

POJ 3422 费用流

思路&#xff1a; 把每个方块拆成两个点 1个入点 1个出点 当前格子的入->出连费用-w[i][j] 容量1的边 当前格子的入->出连费用0 容量k-1的边 此格子的出向右&下&#xff08;如果有的话&#xff09;的格子的入连费用0容量k的边 //By SiriusRen #include <queu…

mysql内置变量_MySQL常用内置变量

MySQL用很多常用的内置变量&#xff0c;掌握这些内置变量后对于我们快速获取当前MySQL的配置有很大帮助&#xff0c;下面就来列举几个常用的变量。查看当前MySQL版本号信息。show variables like version;MariaDB [(none)]> show variables like version;------------------…

Android-TextView跑马灯效果

要实现跑马灯还是比较简单的。 同时有几个需要注意的点&#xff0c;先上代码&#xff1a; 1 public class MTView extends TextView {2 3 4 public MTView(Context context) {5 super(context);6 }7 8 public MTView(Context context, AttributeSet attrs)…

qt没有mysql文件夹_qt5-qt目录下没有mysql文件夹

我安装的qt5.2.1&#xff0c;为什么我的qt安装目录下没有 (例如&#xff1a;D:\Qt\Qt5.0.1\Sources\qtbase\src\plugins\sqldrivers\mysql\)mysql这个文件夹&#xff1f;无法Create MySQL driver for Qt5 on WindowsWindows下解决QSqlDatabase:QMySQL driver not loaded解决参考…

Linux Shell命令能力倾向问题和解答

This section contains Aptitude Questions and Answers on Linux Shell Commands. 本节包含有关Linux Shell命令的 Aptitude问答。 1) Which of the following command is used to check a Linux command is a built-in shell command or external command? cmdtypetypectyp…

php mysql 权重_PHP对MySql的常用操作

关于PHP对MySql的常用操作最近做网站&#xff0c;用PHP操作数据库也很多次了&#xff0c;但总是忘记&#xff0c;参考了网上的很多资料&#xff0c;算是整理记录下。数据库操作类实现数据库的连接&#xff0c;断开&#xff0c;以及请求&#xff1a;/*** Created by PhpStorm.* …

Python timedelta total_seconds()方法与示例

Python timedelta.total_seconds()方法 (Python timedelta.total_seconds() Method) timedelta.timedeltotal_seconds() method is used in the timedelta class of module datetime. timedelta.timedeltotal_seconds()方法在模块datetime的timedelta类中使用。 It uses an i…