我是否可以在mysql数据库上打开审计日志?
我基本上想监视一个小时的所有查询,并将日志转储到一个文件中。
我是否可以在mysql数据库上打开审计日志?
我基本上想监视一个小时的所有查询,并将日志转储到一个文件中。
当前回答
打开表的日志
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL log_output = 'table';
通过select query查看日志
SELECT * FROM mysql.general_log
如果查询太多,则截断表:
TRUNCATE table mysql.general_log;
其他回答
值得一提的是,general_log和slow_log是在5.1.6中引入的:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. 选择常规查询和慢速查询日志输出目的地 从MySQL 5.1.6开始,MySQL服务器提供了灵活的控制 输出到一般查询日志和慢速查询日志的目的地, 如果启用了这些日志。日志条目的可能目的地是 日志文件或mysql中的general_log和slow_log表 数据库
(注意:对于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> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL log_output = 'table';
通过select query查看日志
SELECT * FROM mysql.general_log
如果查询太多,则截断表:
TRUNCATE table mysql.general_log;
快速启用MySQL常规查询日志,无需重新启动。
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';
mysql> SET GLOBAL general_log = 'ON';
我已经通过homebrew安装mysql, mysql版本:mysql Ver 14.14 Distrib 5.7.15,用于osx10.11 (x86_64)使用EditLine包装器。
顶部的答案不工作在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 mysql wamp: c: \ wamp \ bin \ \ mysqlx.y.z \ my.ini mysql xampp: c: \ xampp \ \ bin \ my.ini。