Назад | Перейти на главную страницу

Резервное копирование базы данных MySQL - пока она еще используется

В настоящее время я создаю резервную копию своей базы данных MySQL с помощью mysqldump, например:

mysqldump --user USERX --password=PWDX DBNAMEX > dbbackup__`date '+%m-%d-%Y'`.sql

Когда я выполняю резервное копирование (инициированное заданием cron), я устанавливаю правило .htaccess на своем сайте, чтобы перенаправлять любые запросы на статическую страницу «вниз для резервного копирования, вскоре назад». После завершения резервного копирования я удаляю правило, и сайт снова открывается.

Все хорошо, так было много лет, и, как вы понимаете, это работает отлично, и у меня не было никаких проблем.

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

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

  • Если вы используете InnoDB, вы можете одновременно читать и писать. Вы, вероятно, захотите использовать InnoDB, если еще не сделали этого.
  • Использование InnoDB позволяет выполнять резервное копирование с флагом --single-transaction. Это будет поддерживать базу данных в согласованном состоянии и дамп в реальном времени, позволяя обрабатывать другие транзакции.
  • Если у вас достаточно большая база данных (похоже, вы можете обойтись без этого), вам нужно что-то еще. Существует официальное платное решение для горячего резервного копирования InnoDB, но я уклоняюсь от такой идеи. Если вам это нужно, посмотрите на http://www.percona.com/docs/wiki/percona-xtrabackup:start

Попробуйте взглянуть на mysqlhotcopy - в зависимости от размера вашей базы данных / таблиц и т.д., это может дать вам ответ.

Если вашим механизмом хранения является InnoDB, вы можете получить согласованный mysqldump действующей базы данных с помощью флага --single-transaction (при условии, что вы не меняете структуры таблиц во время резервного копирования). Но с MyISAM это не работает.

Использовать --single-transaction вариант для баз данных InnoDB или --lock-tables для MyISAM.