Как определить, была ли изменена таблица MySQL InnoDB, если нет столбцов меток времени, не сохраняя базу данных состояния?

Я пытаюсь реализовать процедуру инкрементного резервного копирования, которая только выгружает и создает резервные копии таблиц в базе данных MySQL, которые были изменены в течение последних 24 часов. Я могу просмотреть время модификации файлов .MYD и .MYI в каталоге /var/lib/mysql/DBNAME/, чтобы определить, была ли изменена таблица MyISAM, но таблицы InnoDB (которые не были настроены для использования их собственные файлы данных) не имеют уникальных файлов, «открытых» для файловой системы, для которых я могу проверить время модификации. Некоторые из этих таблиц InnoDB огромны (более 100 миллионов строк), но они редко обновляются/добавляются, например, два или три раза в месяц. Я не хочу тратить время/пространство на ежедневный сброс этих таблиц для резервного копирования, если никакие данные не были изменены.

Из-за характера баз данных и таблиц (некоторые из них являются временными/специальными, а некоторые имеют статические схемы, где я не могу предсказать, есть ли в таблице столбец метки времени, и если да, то каково его имя), я не могу запрашивать таблицы. сами, чтобы определить, были ли они недавно изменены.

Существует ли встроенное «время изменения таблицы», хранящееся в MySQL, которое может быть раскрыто путем запроса встроенных переменных/таблиц?

Все наши серверы MySQL используют 5.1 или более позднюю версию.


person user3443522    schedule 20.03.2014    source источник
comment
В заголовке страницы есть поля LSN. Он содержит LSN, когда страница была изменена последней.   -  person akuzminsky    schedule 20.03.2014
comment
но ты изобретаешь колесо. Xtrabackup поддерживает инкрементное резервное копирование в течение многих лет   -  person akuzminsky    schedule 20.03.2014
comment
+1 @akuzminsky, см. percona.com/doc/percona -xtrabackup/2.1/innobackupex/   -  person Bill Karwin    schedule 21.03.2014


Ответы (1)


Если у вас есть база данных information_schema, вы можете получить список недавно обновленных таблиц следующим образом:

SELECT table_schema, table_name, update_time
FROM information_schema.`TABLES`
WHERE update_time > DATE_SUB(NOW(), INTERVAL 1 DAY);
person Tim Burch    schedule 20.03.2014
comment
InnoDB не поддерживает никакого значимого значения в файле update_time. Неясно, является ли время обновления временем UPDATE, временем COMMIT или временем сброса страницы в табличное пространство. - person Bill Karwin; 21.03.2014
comment
Как прокомментировал Билл Карвин, update_time не работает с InnoDB. - person Dave; 03.07.2014