我可以打开我的mysql数据库上的审计日志记录吗?
我基本上想要监视一小时的所有查询,并将日志转储到文件中.
(注意:对于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;
除了我在这里遇到的情况,运行以下内容是将查询转储到日志文件而不重新启动的最简单方法
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;
使用--log选项启动mysql:
mysqld --log=log_file_name
或将以下内容放入您的my.cnf
文件中:
log = log_file_name
任何一个都会将所有查询记录到log_file_name.
您也可以使用--log-slow-queries
选项而不是使用选项仅记录慢速查询--log
.默认情况下,占用10秒或更长时间的查询被认为很慢,您可以通过设置long_query_time
查询在记录之前必须执行的秒数来更改此值.
最佳答案在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的.
启用表的日志
mysql> SET GLOBAL general_log = 'ON'; mysql> SET global log_output = 'table';
按选择查询查看日志
select * from mysql.general_log
无需重新启动即可快速启用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包装器
为了记录,在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表