什么是最后一次访问mysql表?

时间:2011-04-23 06:06:00

标签: mysql

有没有办法告诉mysql表的最后访问时间?通过访问,我指的是该表中的任何类型的操作,包括更新,更改甚至选择或任何其他操作。

感谢。

5 个答案:

答案 0 :(得分:10)

您可以获取表格的最后更新时间。

SELECT update_time FROM information_schema.tables WHERE table_name='tablename'

答案 1 :(得分:2)

您可以使用OS level stat命令。 找到该特定表的ibd文件,然后运行以下命令


  

统计文件位置


如果通过SELECT查询表,则可以在“访问”字段下找到使用该表进行访问的时间戳。

答案 2 :(得分:1)

有关更详细的(数据库名称和表名称)加上句点(范围),请尝试以下查询:

select table_schema as DatabaseName,
  table_name as TableName,
  update_time as LastAccessTime
from information_schema.tables
where update_time < 'yyyy-mm-dd'
group by table_schema
order by update_time asc 

答案 3 :(得分:1)

我不知道如何获得事后的确切时间,但您可以开始转储日志,执行某些操作,然后停止转储日志。日志中显示的是那些在此期间访问的表。

如果您想深入了解日志,则会显示带有时间戳的查询。

告诉mysql将日志文件放在何处

将此行添加到my.cnf(在某些系统上为mysql.conf.d/mysqld.cnf)。

general_log_file = /path/to/query.log

启用常规日志

mysql> SET global general_log = 1;

(别忘了关闭它,它可以很快增长)

做事

所有mysql查询都将添加到/path/to/query.log

禁用常规日志

mysql> SET global general_log = 0;

查看出现的表格

如果它很短,您只需滚动浏览query.log即可。如果没有,那么您可以过滤已知表名的日志,如下所示:

query_words=$(cat mysql_general.log | tr -s [:space:] \\n | tr -c -d '[a-zA-Z0-9][:space:][_\-]' | egrep -v '[0-9]' | sort | uniq)

table_names=$(mysql -uroot -ptest -Dmeta -e"show tables;" | sort | uniq)

comm -12 <(echo $table_names) <(echo $query_words)

从那里,你可以grep日志文件中显示table_names中显示的内容。在那里你会找到时间限制的查询。

另请参阅我制作的this utility

答案 4 :(得分:0)

使用 information_schema 数据库查找相应数据库的哪个表已更新:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tablename'
order by UPDATE_TIME DESC