Answers:
对于那些拥有MySQL> = 5.1.12的用户,可以在运行时全局控制此选项:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
如果您希望输出到文件而不是表:
SET GLOBAL log_output = "FILE";
默认值。SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
我更喜欢这种方法来编辑.cnf文件,因为:
my.cnf
文件,并可能永久打开日志记录/var/log /var/data/log
/opt /home/mysql_savior/var
有关更多信息,请参见《 MySQL 5.1参考手册-服务器系统变量-general_log》。
您可以为此类诊断启用常规查询日志。通常,尽管您没有在生产服务器上记录所有SELECT查询,但这是性能的杀手。
编辑您的MySQL配置,例如/etc/mysql/my.cnf-查找或添加这样的行
[mysqld]
log = /var/log/mysql/mysql.log
重新启动mysql以获取更改,现在您可以
tail -f /var/log/mysql/mysql.log
嗨,很高兴,您可以看到查询的出现。
您可以做一些事情来监视mysql查询日志。
打开mysql配置文件my.cnf
sudo nano /etc/mysql/my.cnf
在[mysqld]
标题下搜索以下行,并取消注释这些行以启用日志
general_log_file = /var/log/mysql/mysql.log
general_log = 1
重新启动mysql服务器以反映更改
sudo service mysql start
在终端中使用以下命令监视mysql服务器日志
tail -f /var/log/mysql/mysql.log
1)如果启用了常规mysql日志记录,则可以根据配置中提到的内容检查日志文件或表中的查询。检查以下命令启用了什么
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
如果我们需要表中的查询历史记录,那么
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
看看表mysql.general_log
如果您希望输出到文件:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2)我们也可以检查.mysql_history文件cat〜/ .mysql_history中的查询
如果启用了mysql binlog,则可以通过浏览到mysql binlog目录在Linux控制台中执行以下命令来检查用户运行的命令
mysqlbinlog binlog.000001 > /tmp/statements.sql
使能
[mysqld]
log = /var/log/mysql/mysql.log
或常规日志将对mysql的性能产生影响
如果您不想更改MySQL配置,可以使用SQL Profiler,例如“ Neor Profile SQL” http://www.profilesql.com。
在阅读了Paul的回答后,我继续在https://dev.mysql.com/doc/refman/5.7/en/query-log.html上寻找更多信息。
我发现一个人真正有用的代码。这是上下文的摘要。
(注意:以下代码不是我的)
该脚本是保持表清洁的示例,它将帮助您减小表的大小。一天之后,将有大约18万条日志查询。(文件中每天30MB)
您需要添加一个额外的列(event_unix),然后可以使用此脚本保持日志的清洁...它将时间戳记更新为Unix时间戳记,删除超过1天的日志,然后将event_time更新为时间戳记来自event_unix ...听起来有点令人困惑,但是效果很好。
新列的命令:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
清理脚本:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
致谢Sebastian Kaiser(代码的原始作者)。
希望有人会像我一样有用。
您可以在linux中查看以下内容
cd /root
ls -al
vi .mysql_history
可能有帮助