是否有任何查询/方式显示在所有服务器上执行的最后查询?
答案 0 :(得分:722)
对于那些有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 Reference Manual - Server System Variables - general_log
答案 1 :(得分:40)
您可以为此类诊断启用general query log。通常,您不会在生产服务器上记录所有SELECT查询,但这是性能杀手。
编辑您的MySQL配置,例如/etc/mysql/my.cnf - 查找或添加这样的行
[mysqld]
log = /var/log/mysql/mysql.log
重新启动mysql以获取该更改,现在可以
tail -f /var/log/mysql/mysql.log
嘿,你可以在他们进来时查看查询。
答案 2 :(得分:15)
你可以做一些流动的事情来监控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
答案 3 :(得分:13)
SELECT * FROM mysql.general_log WHERE command_type ='Query' LIMIT total;
答案 4 :(得分:7)
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
答案 5 :(得分:4)
如果启用了 mysql binlog ,您可以通过执行来检查用户运行的命令 通过浏览到mysql binlog目录在linux控制台中执行以下命令
mysqlbinlog binlog.000001 > /tmp/statements.sql
启用
[mysqld]
log = /var/log/mysql/mysql.log
或一般日志会对mysql的性能产生影响
答案 6 :(得分:3)
也许你可以通过查看query log来找到答案。
答案 7 :(得分:2)
您可以在linux中查看以下内容
cd /root
ls -al
vi .mysql_history
这可能会有所帮助
答案 8 :(得分:2)
如果您不想改变您的MySQL配置,可以使用像#34; Neor Profile SQL"这样的SQL分析器。 http://www.profilesql.com。
答案 9 :(得分:2)
在阅读保罗的回答后,我继续挖掘有关https://dev.mysql.com/doc/refman/5.7/en/query-log.html的更多信息
我找到了一个非常有用的代码。这是上下文的摘要。
(注意:以下代码不是我的)
此脚本是保持表清洁的示例,可帮助您减小表的大小。在一天之后,将会有大约180k的日志查询。 (在文件中,每天30MB)
您需要添加一个额外的列(event_unix)然后您可以使用此脚本来保持日志清洁...它会将时间戳更新为Unix时间戳,删除超过1天的日志然后更新来自event_unix的event_time到timestamp ...听起来有点令人困惑,但它运作得很好。
新列的命令:
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(代码的原作者)。
希望有人会发现它像我一样有用。