Skip-lock-tables и mysqldump

Ежедневно мы запускаем mysql-дампы примерно на 50 отдельных баз данных, упаковываем их и сохраняем их за пределами. Некоторые из этих баз данных довольно большие и содержат таблицы myisam (которые НЕ МОГУТ быть изменены, поэтому предполагают, что это бессмысленно). Я читал об использовании опции skip-lock-tables при выполнении дампа, но не прочитал, быть. Все, что я вижу, это в основном разные итерации "это может иметь неблагоприятные последствия, если данные вставляются в таблицу во время сбрасывания".

Каковы эти побочные эффекты? Означает ли это, что мы пропустим эти запросы при восстановлении или это будет означать, что файл дампа будет сломан и бесполезен? Я, честно говоря, мог бы уделить меньше внимания, если бы мы потеряли NEW данные, опубликованные после запуска дампа, поскольку я просто ищу моментальный снимок вовремя.

Могу ли я полагаться на эти дампы базы данных, чтобы содержать все данные, которые были сохранены до выдачи дампа.

Ответы

Ответ 1

Параметр

- skip-lock-tables указывает утилите mysqldump не выдавать команду LOCK TABLES, прежде чем получить дамп, который получит блокировку READ для каждой таблицы. Все таблицы в базе данных должны быть заблокированы для улучшения согласованности в случае процедуры резервного копирования. Даже с таблицами блокировки пропуска, в то время как таблица сбрасывается, не будет получать никаких INSERT или UPDATE, поскольку она будет заблокирована из-за того, что SELECT требуется для получения всех записей из таблицы. Похоже на это

SELECT SQL_NO_CACHE * FROM my_large_table

и вы можете увидеть его в списке процессов с помощью команды SHOW PROCESSLIST. Если вы используете механизм MyISAM, который не является транзакционным, блокировка таблиц в любом случае не гарантирует ссылочную целостность и согласованность данных, я лично использую параметр - skip-lock-tables почти всегда. В InnoDB используется параметр --single-transaction для ожидаемого эффекта. Надеюсь, это поможет.