首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么last_update来自mysql.innodb_table_stats与UPDATE_TIME在information_schema.tables中是不同的?

问为什么last_update来自mysql.innodb_table_stats与UPDATE_TIME在information_schema.tables中是不同的?
EN

Database Administration用户
提问于 2021-11-11 14:48:48
回答 1查看 1.2K关注 0票数 0

我正在尝试确定使用访问特定模式的用户是何时更新的表。

作为根用户,当我运行SELECT * FROM mysql.innodb_table_stats WHERE table_name = 'table';时,我在列UPDATE_TIME中得到一个日期时间

作为一个用户,当我为同一个表模式运行SELECT UPDATE_TIME, TABLE_SCHEMA, TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA = 'database' ORDER BY UPDATE_TIME DESC, TABLE_SCHEMA, TABLE_NAME;时,在UPDATE_TIME上我会得到null。

这一切为什么要发生?

如何获得特定表上最后一次更新的日期?

让用户访问模式mysql是一种安全风险吗?

EN

回答 1

Database Administration用户

发布于 2021-11-11 16:44:28

https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html说:

上次更新数据文件时的UPDATE_TIME。对于某些存储引擎,此值为空。例如,InnoDB在其系统表空间中存储多个表,并且不应用数据文件时间戳。即使在每个InnoDB表都位于一个单独的.ibd文件中的按表模式下,更改缓冲也会延迟对数据文件的写入,因此文件修改时间与上次插入、更新或删除的时间不同。对于MyISAM,使用的是数据文件时间戳;但是,在Windows上,时间戳不会通过更新更新,因此该值不准确。UPDATE_TIME显示对未分区的InnoDB表执行的最后一次更新、插入或删除的时间戳值。对于MVCC,时间戳值反映提交时间,这被认为是最后一次更新时间。当服务器重新启动或将表从InnoDB数据字典缓存中移除时,时间戳不会持久。

https://dev.mysql.com/doc/refman/8.0/en/innodb-persistent-stats.html#innodb-persistent-stats-tables说:

表15.6列的innodb_table_stats . last_update表示InnoDB最后一次更新该行的时间戳

因此,更新时间是innodb_table_stats表中行的最后更新时间,而不是相应InnoDB表的最后更新时间。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/302475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档