2

Я запускаю ночные резервные копии на моем сервере, используя mysqldump. К сожалению, это в значительной степени убивает мой сайт примерно на полчаса каждую ночь, так как во время резервного копирования таблицы блокируются.

Согласно списку процессов, даже кажется, что запросы к несвязанным таблицам иногда блокируются, например, "INSERT INTO A" находится в состоянии блокировки в течение нескольких минут, в то время как единственный запущенный запрос касается только таблицы B.

Есть ли лучший способ сделать такие резервные копии?

1 ответ1

4

У вас есть два варианта:

О. Используйте --skip-lock-tables mysqldump. Ваши таблицы не будут заблокированы, но ваша резервная копия может быть непоследовательной (зависит от вашей схемы: если транзакции вашей базы данных затрагивают несколько таблиц одновременно, и одна таблица уже резервируется, а другая нет. Например: две таблицы: клиенты и заказы. Если сначала выполняется резервное копирование клиентов, а затем вставляется новая пара клиент / заказ, вы можете получить заказ без клиента в резервной копии).

Эта проблема является основной причиной, почему mysqldump блокирует все таблицы по умолчанию. Если эта проблема к вам не относится, пропустить блокировку таблицы в mysql - самое простое решение.

Б. Используйте другой метод резервного копирования. Например: очистить таблицы с помощью блокировки чтения, создать снимок LVM, разблокировать таблицы, смонтировать снимок LVM и выполнить резервное копирование данных. Это быстро, намного сложнее, чем простой mysqldump. Google "MySQL резервного копирования со снимками LVM", есть много сценариев и учебных пособий.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .