MariaDB/MySQL: получить контрольную сумму таблицы InnoDB

Как получить надежную контрольную сумму в таблице InnoDB? Я хочу что-то вроде CHECKSUM TABLE foo QUICK;, которое есть у MyISAM, и оно должно быть быстрым. Я разрабатываю инструмент для надежного мониторинга и быстрого реагирования на изменения в моей базе данных.

Таблицы InnoDB не обновляются UPDATE_TIME в information_schema.TABLES, и я не могу добавить в таблицу автоматически обновляемый столбец last_update, чтобы я мог сделать MAX(last_update). Во всяком случае, это не сработает для удаления. Кроме того, я не доволен условиями гонки, которые вводят временные метки с точностью до полных секунд.

Я видел предложения использовать NUM_ROWS и MODIFIED_COUNTER из information_schema.INNODB_SYS_TABLESTATS в качестве контрольной суммы, но в моем тестировании на MariaDB 10.0 эти значения не изменялись в запросах UPDATE.


person Erik Cederstrand    schedule 10.06.2015    source источник
comment
вы можете отслеживать LSN с SHOW ENGINE INNODB STATUS   -  person akuzminsky    schedule 10.06.2015
comment
На самом деле, MODIFIED_COUNTER, не меняющийся при ОБНОВЛЕНИИ, является ошибкой в ​​MySQL и MariaDB. Сообщается как bugs.mysql.com/bug.php?id=77301 I думаю, я просто подожду, пока это будет исправлено.   -  person Erik Cederstrand    schedule 11.06.2015
comment
Быстрое обновление: MySQL решил, что это известная проблема, и закрыл тикет как #wontfix. С другой стороны, MariaDB приняла ошибку и быстро исправила ее в MariaDB 10.0.23: mariadb. atlassian.net/browse/MDEV-8297   -  person Erik Cederstrand    schedule 03.02.2016


Ответы (3)


Порядковый номер журнала увеличивается каждый раз, когда клиент записывает данные в 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

person akuzminsky    schedule 10.06.2015

Другой подход: включите binlog. Все изменения идут к нему. Контролируйте это.

person Rick James    schedule 10.06.2015

MODIFIED_COUNTER, не меняющийся при ОБНОВЛЕНИИ, является ошибкой в ​​MySQL и MariaDB. Сообщается как http://bugs.mysql.com/bug.php?id=77301 Думаю, я просто подожду, пока это исправят, так как это прекрасно решает мою проблему.

person Erik Cederstrand    schedule 12.06.2015