Как именно движок InnoDB в MySQL обновляет свои основные файлы хранения данных?

В ходе тестирования утилиты резервного копирования Linux In In Time мне стало известно, что я не могу понять, как на самом деле MariaDB сохраняет данные.

После добавления фиктивной записи в таблицу и оставления ее до следующего снимка я с удивлением обнаружил, что восстановление более старого снимка (сделанного до добавления фиктивной записи) не привело к удалению фиктивной записи.

Я попробовал это еще два раза: добавлена ​​фиктивная новая запись, снимок происходит (автоматически, потому что это то, что я сказал Back In Time, чтобы сделать)... и восстановление не делает то, что я ожидал.

Глядя на реальные файлы "Modified by", в главном каталоге (где все базы данных являются подкаталогами) я обнаружил, что изменились только два файла: ib_logfile0 а также ib_logfile1, При настройке моей работы Back In Time я сознательно пропустил их из конфигурации, потому что я предположил, что они были "просто журналами". Ясно, что нет.

Чтобы решить мою непосредственную проблему, кажется, что все, что мне нужно сделать, это включить эти два файла в мои снимки. Но как или по какому процессу ibdata1 получать обновленную информацию? Возможно, когда служба MySQL закрыта? Или пустили?

Что странно, так это то, что я не нахожу много информации об этом.

1 ответ

Решение

Вы не можете использовать универсальную утилиту резервного копирования, такую ​​как Back in Time, для резервного копирования баз данных.

Как вы обнаружили, вам нужен непротиворечивый снимок файлов базы данных, чтобы иметь работоспособную резервную копию. Без этого вы в конечном итоге получите что-то неправильное или просто неуместное. Проблема в том, что ib_logfile* временно хранятся, а затем переносятся в табличные пространства. Вы можете удалить их, только если вы чисто завершили работу (что больше, чем systemctl stop mysqld), чего, очевидно, не было, когда вы делали резервную копию.

Таким образом, вкратце для MySQL, используйте программу резервного копирования, которая знает о MySQL (mysqldump, mydumper, xtrabackup), или инструмент согласованных снимков (llvm моментальные снимки или согласованные функции моментальных снимков на основе файловой системы) или подчиненный репликации один из предыдущих методов.

Возникновение файлов данных MySQL извне MySQL приведет только к потере данных. Не делай этого.

Другие вопросы по тегам