Log all queries in mysql
我是否可以打开mysql数据库上的审计日志记录?
我基本上想监视所有查询一个小时,然后将日志转储到一个文件中。
(注:对于mysql-5.6+来说,这是行不通的。如果向下滚动或单击此处,有一个适用于MySQL-5.6+的解决方案。)
如果不想或无法重新启动MySQL服务器,可以在运行中的服务器上执行以下操作:
- 在
mysql 数据库上创建日志表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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' |
1 2 3 4 5 6 7 8 9 | 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' |
。
- 在数据库上启用查询日志记录
- 查看日志
。
- 禁用数据库上的查询日志记录
。
除了我在这里看到的,运行以下命令是将查询转储到日志文件而不重新启动的最简单方法
1 2 3 |
可以用关闭
。
使用--log选项启动mysql:
1 |
或者将以下内容放入您的
1 | log = log_file_name |
号
其中一个将记录所有查询以记录文件名。
也可以使用
在MySQL5.6+中,最佳答案不起作用。改为使用:
在my.cnf/my.ini文件中
ubuntu/debian:/etc/mysql/my.cnf版windows:c:programdatamysqlmysql服务器5.xwamp:c:wampinmysqlmysqlx.y.zmy.inixampp:c:xamppmysqlinmy.ini。
为表启用日志
号
按选择查询查看日志
。
快速启用MySQL常规查询日志而不重新启动。
1 2 |
。
我已经通过自制安装了mysql,mysql版本:mysql ver 14.14 distrib 5.7.15,用于使用editline wrapper的osx10.11(x86_64)
关于记录,5.1.6中介绍了通用日志和慢日志:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. Selecting General Query and Slow Query Log Output Destinations
As of MySQL 5.1.6, MySQL Server provides flexible control over the
destination of output to the general query log and the slow query log,
if those logs are enabled. Possible destinations for log entries are
log files or the the general_log and slow_log tables in the mysql
database
号
您应该知道,登录MySQL确实会影响性能,但这可能是一个明智的做法。
我通常把它放在dev服务器上(除非它把我们逼疯了:)
如果使用的是AWS RDS MySQL,请在这里逐步指导。
当设置为"文件"输出时,您可以直接从AWS RDS"日志"控制台查看日志。
aws-rds-mysql日志
OS/MySQL版本:
1 2 3 4 5 |
号
添加日志记录(例如,我不认为
1 2 3 4 5 |
号
重新启动MySQL
结果:
1 2 3 4 5 6 7 8 9 10 | $ 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 |
号