如何在InnoDB表上获得可靠的校验和?我想要像MyISAM那样的CHECKSUM TABLE foo QUICK;
,它需要快速。我正在开发一种工具来可靠地监控并迅速对数据库中的更改做出反应。
InnoDB表格不会更新UPDATE_TIME
中的information_schema.TABLES
,而且我无权向表中添加自动更新的last_update列,因此我可以{{1 }}。无论如何,它不适用于删除。此外,我对只有全秒精度的时间戳引入的竞争条件不满意。
我已经看到了使用MAX(last_update)
中的NUM_ROWS
和MODIFIED_COUNTER
作为校验和的建议,但在我对MariaDB 10.0的测试中,这些值在{{1}上未更改}查询。
答案 0 :(得分:0)
每次客户端写入InnoDB时,日志序列号都会增加。
mysql> pager grep "Log sequence number"
PAGER set to 'grep "Log sequence number"'
mysql> show engine innodb status\G
Log sequence number 243755747560
1 row in set (0.00 sec)
要知道修改了哪个表,您可以扫描REDO日志。请参阅REDO日志文件格式https://www.sba-research.org/wp-content/uploads/publications/WSDF2012_InnoDB.pdf
的说明答案 1 :(得分:0)
另一种方法:打开binlog。所有的变化都归于它。监控它。
答案 2 :(得分:0)
MODIFIED_COUNTER在UPDATE上没有变化是MySQL和MariaDB中的一个错误。报告为http://bugs.mysql.com/bug.php?id=77301我想我会等待修复,因为它很好地解决了我的问题。