我每小时创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';"