是否有任何查询/方法显示在所有服务器上执行的最后查询?
当前回答
如果开启了mysql binlog,可以通过执行命令查看用户执行的命令 以下命令在Linux控制台通过浏览到mysql binlog目录
mysqlbinlog binlog.000001 > /tmp/statements.sql
启用
[mysqld]
log = /var/log/mysql/mysql.log
或者一般的日志会对mysql的性能有影响
其他回答
你可以做流动的事情来监视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
如果开启了mysql binlog,可以通过执行命令查看用户执行的命令 以下命令在Linux控制台通过浏览到mysql binlog目录
mysqlbinlog binlog.000001 > /tmp/statements.sql
启用
[mysqld]
log = /var/log/mysql/mysql.log
或者一般的日志会对mysql的性能有影响
也许您可以通过查看查询日志来找到这一点。
读完保罗的回答后,我继续在https://dev.mysql.com/doc/refman/5.7/en/query-log.html上挖掘更多信息
我发现了一个非常有用的代码。这里是上下文的摘要。
(注:以下代码不是我的)
这个脚本是一个保持表整洁的示例,这将帮助您减少表的大小。一天之后,将会有大约180k的日志查询。(在一个文件中,每天是30MB)
你需要添加一个额外的列(event_unix),然后你可以使用这个脚本来保持日志干净…它会将时间戳更新为unix时间戳,删除超过1天的日志,然后将event_time从event_unix更新为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(代码的原始作者)。
希望有人会像我一样觉得它有用。
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文件中的查询 猫~ / .mysql_history
推荐文章
- MySql: Tinyint (2) vs Tinyint(1) -有什么不同?
- 如何在MySQL表中移动列?
- 在MySQL中选择最后一行
- 如何删除MySQL root密码
- MySQL对重复键更新在一个查询中插入多行
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- MySQL:如何复制行,但改变几个字段?
- 不能删除或更新父行:外键约束失败
- 为什么logcat没有显示任何东西在我的Android?
- Mysql错误1452:不能添加或更新子行:外键约束失败
- MySQL DISTINCT在GROUP_CONCAT()上
- 第一次设计数据库:我是否过度设计了?
- 在Python中记录未捕获的异常
- MySQL选择一个列DISTINCT,与其他列相对应
- 重定向复制的标准输出到日志文件从bash脚本本身