用于显示查询历史的 SQL 命令

Posted

技术标签:

【中文标题】用于显示查询历史的 SQL 命令【英文标题】:SQL command to display history of queries 【发布时间】:2011-12-10 16:59:26 【问题描述】:

我想在我的 mysql 查询浏览器中显示我执行的 sql 命令历史记录。显示历史的sql语句是什么?

【问题讨论】:

听起来像是这个问题的转贴:***.com/questions/650238/… How to show the last queries executed on MySQL?的可能重复 【参考方案1】:

@GoYun.Info 回答但使用 python 3

cat ~/.mysql_history | python3 -c "import sys; print(''.join([l.encode('utf-8').decode('unicode-escape') for l in sys.stdin]))" 

【讨论】:

【参考方案2】:

您可以从 ~/.mysql_history 中查看历史记录。但是文件的内容是由 wctomb 编码的。查看内容:

shell> cat ~/.mysql_history | python2.7 -c "import sys; print(''.join([l.decode('unicode-escape') for l in sys.stdin]))"

来源:Check MySQL query history from command line

【讨论】:

【参考方案3】:

对于 MySQL > 5.1.11 或 MariaDB

    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';

正如 jeffmjack 在 cmets 中提到的,除非您编辑配置文件(例如,编辑 /etc/mysql/my.cnf,然后重新启动以应用更改),否则这些设置将在下次会话之前忘记。

现在,如果您愿意,可以tail -f /var/log/mysql/mysql.log

More info here: Server System Variables

【讨论】:

只是对上面的一些澄清:这里的复制粘贴命令用于 MySQL 的单个会话,例如您可以从交互式 MySQL 命令行输入这些。如果您希望它们成为 MySQL 实例的永久功能,则需要将这些命令放入 /etc/mysql/my.cnf 并重新启动 MySQL 服务。 另外请注意,如果/path/to/your/logfile.log 被删除,日志记录将停止,直到您再次执行SET GLOBAL general_log_file = "/path/to/your/logfile.log";(或者如果您编辑了配置,可能会重新启动会话?)。【参考方案4】:

你会在那里找到它

~/.mysql_history

你会像这样使它可读(没有转义):

sed "s/\\\040/ /g" < .mysql_history

【讨论】:

【参考方案5】:

~/.myslgui/query-browser/history.xml 在这里您可以找到使用mysql_query_browser 进行的最后查询 (几天前)

【讨论】:

【参考方案6】:

(Linux) 打开你的终端ctrl+alt+t 运行命令

 cat ~/.mysql_history

你会得到所有以前的mysql查询历史享受:)

【讨论】:

【参考方案7】:

试试

 cat ~/.mysql_history

这将显示系统上运行的所有 mysql 命令

【讨论】:

不是全部,某些包含“密码”之类的字符串会出现抑制。 它通常也不是您打开的 MySQL CLI 的最新版本,因此您可能必须 exit MySQL 然后读取文件。 这仅显示登录用户执行的命令。 如何在 windowss 中做到这一点 其他命令是否有可能被抑制或无序?而且,日志会实时更新吗?【参考方案8】:

您可以查看查询缓存:http://www.databasejournal.com/features/mysql/article.php/3110171/MySQLs-Query-Cache.htm,但它可能无法让您访问实际查询,并且如果它确实有效,将会非常失败(微妙的双关语)

但 MySQL 查询浏览器很可能会在 MySQL 引擎之外维护自己运行的查询列表。您必须在您的应用中执行相同的操作。

编辑:请参阅 dan m 的评论导致此:How to show the last queries executed on MySQL? 看起来不错。

【讨论】:

以上是关于用于显示查询历史的 SQL 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何查询历史sql

SQL*Plus 格式化查询结果

用于从 N 记录的其他表值更新值的 SQL 查询

history查询历史命令

oracle执行历史查不到执行sql

通过SQL Server数据库查询ifix历史报警信息(上)