有没有办法告诉mysql表的最后访问时间?通过访问,我指的是该表中的任何类型的操作,包括更新,更改甚至选择或任何其他操作。
感谢。
答案 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)
我不知道如何获得事后的确切时间,但您可以开始转储日志,执行某些操作,然后停止转储日志。日志中显示的是那些在此期间访问的表。
如果您想深入了解日志,则会显示带有时间戳的查询。
将此行添加到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