Определите состояние MySQL с помощью модуля Perl DBI - PullRequest
0 голосов
/ 10 августа 2010

Я использую сценарий Perl для выгрузки содержимого базы данных MySQL.Модуль Perl, который я использую, является DBI CPAN.Есть ли способ узнать, изменилось ли состояние БД с момента последнего дампа, так что мне не нужно повторно делать дБ?

Ответы [ 3 ]

1 голос
/ 14 августа 2010

Если все ваши таблицы используют движок InnoDB, я предполагаю, что вы можете проверить innodb_buffer_pool_write_requests :

SHOW STATUS LIKE 'innodb_buffer_pool_write_requests';

Если с момента последней записи в любую таблицу InnoDB была записьесли вы проверите его, это значение увеличится.

Возможны ложные срабатывания.Быстрая проверка показывает, что это значение увеличивается во время и после:

START TRANSACTION; INSERT INTO [...]; ROLLBACK;

Но я считаю, что если произошла какая-либо запись, это значение должно измениться.Проверьте это до того, как начнется предыдущий дамп и после того, как текущий дамп завершится, и если его значение останется прежним, и все ваши таблицы будут InnoDB, дампы должны быть идентичны.

Тем не менее ...

Если вам нужно создать дамп всей базы данных MySQL, и вас вообще беспокоит согласованность, вы почти наверняка захотите создать этот дамп с помощью mysqldump :

mysqldump databasename

или, если SHOW TABLE STATUSпоказывает, что все ваши таблицы используют движок InnoDB,

mysqldump --single-transaction databasename

, который имеет тот же эффект, но, вероятно, заблокирует ваши таблицы на гораздо более короткий период.

Попытка написать собственный сценарий дляполучить последовательный дамп почти наверняка плохая идея по многим причинам.(Будет трудно понять, когда вы добились успеха; это означает, что ошибки возможны; ошибки с согласованностью могут иметь слегка разрушительные последствия, которые являются худшими; ваш сценарий будет медленнее и, вероятно, будет использовать больше оперативной памяти.)

По умолчанию mysqldump выводит свой вывод в стандартном SQL.Если вы хотите манипулировать данными самостоятельно, вы можете получить вывод с разделителями табуляции, добавив --tab=filename.

0 голосов
/ 14 августа 2010

Или сделай сам.Создайте «таблицу журналов» в вашей БД и вставляйте имя таблицы и временную метку каждый раз, когда вы делаете дамп данных.Я думаю, должно быть несколько строк кода DBI.

HTH

0 голосов
/ 10 августа 2010

Если на вашем сервере включена двоичная регистрация, вы сможете сравнить вывод SHOW BINARY LOGS с предыдущим запуском, чтобы увидеть, изменилось ли что-либо.

...