Если все ваши таблицы используют движок 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
.