当前位置:  开发笔记 > 编程语言 > 正文

在mysql中记录所有查询

如何解决《在mysql中记录所有查询》经验,为你挑选了7个好方法。

我可以打开我的mysql数据库上的审计日志记录吗?

我基本上想要监视一小时的所有查询,并将日志转储到文件中.



1> Alexandre Ma..:

(注意:对于mysql-5.6 +,这不起作用.如果你向下滚动或点击这里,有一个适用于mysql-5.6 +的解决方案.)

如果您不想或无法重新启动MySQL服务器,可以在运行的服务器上继续这样操作:

mysql数据库上创建日志表

  CREATE TABLE `slow_log` (
   `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `query_time` time NOT NULL,
   `lock_time` time 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` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
  CREATE TABLE `general_log` (
   `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `command_type` varchar(64) NOT NULL,
   `argument` mediumtext NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'

启用数据库的查询日志记录

SET global general_log = 1;
SET global log_output = 'table';

查看日志

select * from mysql.general_log

禁用数据库的查询日志记录

SET global general_log = 0;


我不确定这是否适用于每个版本的MySQL(我在5.5),但我没有必要创建表.我遵循相同的建议减去创建表,这里提到:http://stackoverflow.com/a/678310/135101
应该注意的是,`CREATE TABLE`命令应该(如果表不存在)应该在`mysql`数据库上执行,而不是在任何用户创建的数据库上执行.也许可以更新SQL语句以反映这一点.
要查看日志`SELECT*FROM mysql.general_log order by(event_time)desc`会做得更好.只是说.:-)

2> 小智..:

除了我在这里遇到的情况,运行以下内容是将查询转储到日志文件而不重新启动的最简单方法

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

可以关闭

SET global general_log = 0;


绝对喜欢这个,适用于DB上的现有和新连接

3> Robert Gambl..:

使用--log选项启动mysql:

mysqld --log=log_file_name

或将以下内容放入您的my.cnf文件中:

log = log_file_name

任何一个都会将所有查询记录到log_file_name.

您也可以使用--log-slow-queries选项而不是使用选项仅记录慢速查询--log.默认情况下,占用10秒或更长时间的查询被认为很慢,您可以通过设置long_query_time查询在记录之前必须执行的秒数来更改此值.


这应该是不言而喻的,但是在生产箱中打开它会很快变得非常有趣.*G*
对于mysql 5.6,请使用[general_log](http://stackoverflow.com/a/25080306/831549)
如果您无法以这种方式启用日志记录,请检查mysql用户是否可以写入相应的文件位置.
是否可以仅在1个特定数据库/表上记录查询?
@Temujin phpmyadmin现在为您指定日志('版本')的表提供了"跟踪"选项,它将使用有关时间和整个查询的信息记录影响它的查询.
应删除或编辑此接受的答案,以反映它不适用于MySQL 5.6.+.

4> ademin..:

最佳答案在mysql 5.6+中不起作用.请改用:

[mysqld]
general_log = on
general_log_file=/usr/log/general.log

在my.cnf/my.ini文件中

Ubuntu/Debian:/etc/mysql/my.cnf
Windows:c:\ ProgramData\MySQL\MySQL Server 5.x
wamp:c:\ wamp\bin\mysql\mysqlx.yz\my.ini
xampp:c:\ xampp\mysql的\ BIN\my.ini的.



5> 小智..:

启用表的日志

mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';

按选择查询查看日志

select * from mysql.general_log



6> Nanhe Kumar..:

无需重新启动即可快速启用MySQL常规查询日志.

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';

我已经通过自制软件安装mysql,mysql版本:mysql Ver 14.14 Distrib 5.7.15,for osx10.11(x86_64)使用EditLine包装器



7> Marcello Rom..:

为了记录,在5.1.6中引入了general_log和slow_log:

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

5.2.1.选择常规查询和慢查询日志输出目标

从MySQL 5.1.6开始,如果启用了这些日志,MySQL Server可以灵活地控制输出到普通查询日志的目的地和慢查询日志.日志条目的可能目标是日志文件或mysql数据库中的general_log和slow_log表

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有