簡體   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