在mysql中记录所有查询

时间:2008-11-20 00:39:02

标签: mysql logging

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

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

10 个答案:

答案 0 :(得分:213)

注意:对于mysql-5.6 +,这不起作用。如果你scroll downclick here,有一个适用于mysql-5.6 +的解决方案。)< / p>

如果您不想或无法重启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;

答案 1 :(得分:181)

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

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;

答案 2 :(得分:159)

使用--log选项启动mysql:

mysqld --log=log_file_name

或将以下内容放在my.cnf文件中:

log = log_file_name

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

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

答案 3 :(得分:112)

最佳答案在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.y.z \ my.ini
xampp :c:\ xampp \ mysql \ bin \ my.ini。

答案 4 :(得分:29)

启用表的日志

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

按选择查询查看日志

select * from mysql.general_log

答案 5 :(得分:12)

快速启用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包装

答案 6 :(得分:6)

为了记录,在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表   数据库

答案 7 :(得分:4)

你应该知道mysql登录确实会影响性能,但这可能是明智之举。

我通常把它留在开发服务器上(除非它让我们疯了:))

答案 8 :(得分:1)

如果使用AWS RDS MYSQL,请在此处逐步指导。

设置为&#39; file&#39;输出您可以直接从AWS RDS&#34; Log&#34;控制台。

AWS RDS MYSQL Logging

答案 9 :(得分:0)

OS / mysql版本:

$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64

$ mysql --version
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using  EditLine wrapper

添加日志记录(例如,我不认为/var/log/...是Mac OS上的最佳路径,但是可行:

sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf

[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log

重启MySQL

结果:

$ sudo tail -f /var/log/mysql/mysqld_general.log
181210  9:41:04    21 Connect   root@localhost on employees
           21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
           21 Query SET NAMES latin1
           21 Query SET character_set_results = NULL
           21 Query SET autocommit=1
           21 Query SELECT USER()
           21 Query SELECT USER()
181210  9:41:10    21 Query show tables
181210  9:41:25    21 Query select count(*) from current_dept_emp