将MySQL设置为持久化所有表的update_time

时间:2018-01-31 16:05:18

标签: mysql

有许多表,可能超过50个表,这些表是由代码读取和写入的,这有点太多而无法快速理解。遗憾的是,许多表都没有时间戳列。我想知道当代码每天运行一次时,哪些被更改。

所以我尝试了this solution

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

...执行但返回Null。可以在MySQL服务器上运行一些简单的命令,以便它实际上开始保存并保留它,以便我可以在几天内检查它吗?

1 个答案:

答案 0 :(得分:1)

答案是:嗯,这取决于。遗憾的是,update_timeinformation_schema.tables字段上的MySQL文档并不太详细,但是,您可以在show table status语句的文档中找到相关信息,该语句也会从{file-per-table mode语句中检索数据。 1}}查看:

  

上次更新数据文件时。对于某些存储引擎,此值为NULL。例如,InnoDB在其系统表空间中存储多个表,并且数据文件时间戳不适用。即使每个InnoDB表在单独的.ibd文件中使用每个表文件模式,更改缓冲也会延迟写入数据文件,因此文件修改时间与上次插入,更新或删除的时间不同。对于MyISAM,使用数据文件时间戳;但是,在Windows上,更新不会更新时间戳,因此值不准确。

总结:如果你想将它与innodb一起使用,那么你必须使用change the setting才有机会显示这些数据(即使这样也是不准确的)。 MyISAM应该没问题(除非您使用的是Windows)。没有提到其他存储引擎。

在大型数据库上启用每个表文件模式将是一个非常大的挑战,您可能需要备份表,删除它们,this feature request,然后再次导入它们。所以,在急于做到这一点之前,你必须仔细评估这个功能是否值得改变。此外,我的理解是,即使启用了每表文件模式,InnoDB也只支持版本5.7.2中的此属性,这是根据SQL XML Query上的最后一个开发人员评论:

  

[2014年9月15日5:21]MarkoMäkelä发布者:

     

WL#6658在MySQL 5.7.2中为InnoDB表实现了update_time。请注意它   在服务器重新启动时不持久。 WL#6917已申请制作   update_time持久。