MySQL,有没有一种方法可以告诉数据库上次更改/修改的时间?

我每小时创build5个数据库的MySQL转储。 其中3个数据库很less发生变化,所以为这些3个数据库创build一个MySQL转储非常浪费时间和资源。

有没有办法,我可以检索一个特定的数据库上次更改/更新的UNIX时代秒? 我会将它与最新的转储文件进行比较,如果有更改,只能转储另一个。

所以再次质疑:我怎样才能得到最后更新/更改特定数据库的UNIX时代date时间?

这并不完全是你正在寻找的答案,但我认为这就是你所需要的: 启用二进制日志logging,备份二进制日志,并创build每周一次完整的转储。

我用:

mysql -e "use <NAMEOFTHEDATABASE>;SELECT MAX(UPDATE_TIME) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ;" | grep -v "\----" | grep -v "MAX(UPDATE_TIME)" | awk '{print $1}' 

问候!

Maatkit有一个工具可以对表格进行快速校验。 这是mk-table-checksum

你可以locking这些表,运行mk-table-checksum并存储校验和,然后解锁这些表,然后查看这些值,看看是否需要运行mysqldump。

只适用于MyISAM表

您可以针对information_schema表运行一个MySQL查询:

示例(用数据库名称replacedbname):

 SELECT UNIX_TIMESTAMP(MAX(UPDATE_TIME)) as last_update FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' GROUP BY TABLE_SCHEMA; 

这个问题不时出现,简单的答案是这个信息不能由任何一种方法可靠地获得,原因很简单,因为它不一定被logging。

对于MyISAM表,您可以使用查询Phil发布。 我不知道其他人,但对于InnoDB,至less没有任何查询会返回你想要的信息。 在这种情况下,您可能会考虑使用触发器在数据更改时logging表中的时间戳,但实际上性能损失很可能会比转储更大。

我发现这个metod,从http://mysqladministrators.blogspot.it/2012/02/get-database-size.html

我不确定它是否可以帮助你,因为我没有在MySql中做好准备

获取数据库大小,可用空间和上次更新

只需从表TABLES中的INFORMATION_SCHEMA数据库查询到查询浏览器或CLI即可获取当前数据库大小。

 SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ; 

获取数据库的可用空间

 SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", sum( data_free )/ 1024 / 1024 "Free Space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

按更新时间获取数据库上次更新,然后创build时间。

 SELECT MAX(UPDATE_TIME), MAX(CREATE_TIME), TABLE_SCHEMA FROM `TABLES` GROUP BY TABLE_SCHEMA ORDER BY 1, 2; 

由于无法获取innodb表的update_time,我直接检查db文件:

 find /var/lib/mysql -name \*.frm | xargs ls -l --time-style="+%m-%d-%Y" | awk '{print $6,$7}' 

这给我几天,我用来validation表是无效的,可以归档。

你正在寻找只需要改变ls的时间风格的Unix时间戳:

 find /var/lib/mysql -name \*.frm | xargs ls -l --time-style="+%s" | awk '{print $6,$7}' 

这假定您的数据库文件在/ var / lib / mysql中,但是您可以通过运行以下查询来获取该位置:

 mysql -e "SHOW VARIABLES LIKE 'datadir';"