繁体   English   中英

MariaDB / MySQL:获取InnoDB表的校验和

[英]MariaDB/MySQL: Get checksum of InnoDB table

如何在InnoDB表上获得可靠的校验和? 我想要类似CHECKSUM TABLE foo QUICK;东西CHECKSUM TABLE foo QUICK; MyISAM具备的功能,并且它必须快速。 我正在开发一种工具,可以可靠地监视数据库中的变化并迅速做出反应。

InnoDB表不会在information_schema.TABLES更新UPDATE_TIME ,而且我也不会随意向表中添加自动更新的last_update列,因此可以执行MAX(last_update) 无论如何,它不适用于删除。 另外,我对仅以整秒为单位的时间戳引入的竞争条件也不满意。

我已经看到建议使用来自information_schema.INNODB_SYS_TABLESTATS NUM_ROWSMODIFIED_COUNTER作为校验和,但是在我对MariaDB 10.0的测试中,这些值在UPDATE查询中没有更改。

每次客户端写入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

另一种方法:打开binlog。 所有的更改都去了。 监视它。

MODIFIED_COUNTER不会在UPDATE上更改,这是MySQL和MariaDB中的错误。 报告为http://bugs.mysql.com/bug.php?id=77301我认为我将等待修复,因为它很好地解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM