2012-05-08 3 views
10

Я поддерживаю большую базу данных MySQL. Мне нужно делать резервную копию каждую ночь, но БД активна все время. Есть запросы от пользователей. Теперь я просто отключу веб-сайт, а затем сделаю резервную копию, но это очень плохо, поскольку служба отключена, и пользователям это не нравится.Лучшая практика резервного копирования базы данных

Что такое хороший способ резервного копирования данных, если данные были изменены во время резервного копирования?

Что лучше всего подходит для этого?

+0

Возможно, лучше подходит для [dba.stackexchange.com] (http://dba.stackexchange.com/). – Filburt

+0

Я использую таблицы myiasm –

ответ

9

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

Репликация базы данных MySQL довольно проста в настройке и мониторинге. Вы можете настроить его, чтобы получить все изменения, внесенные в вашу производственную базу данных, а затем отключить его в автономном режиме, чтобы сделать резервную копию.

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

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

Вот ссылка на документы на MySQL Replication.

+3

+1 Резервное копирование из реплицированной базы данных является стандартным способом. –

+1

Это интересно. Что происходит, когда вы делаете раб онлайн после резервного копирования? Может ли MySQL скопировать последние изменения? Является ли эта большая загрузка сервером, когда mysql делает это? –

+3

Репликация обрабатывается одним потоком на главном сервере, посылая транзакции по очереди к подчиненному устройству, где они затем применяются. После того, как вы вернете рабов обратно в режиме онлайн, он догоняет таким образом, чтобы не накладывать значительную нагрузку на мастера. Он использует одно соединение с базой данных. Нагрузка на мастера не является проблемой. Я сделал это в большой базе данных с почти 1 ТБ данных. –

0

Что вы хотите сделать, называется «онлайн-резервное копирование». Вот указатель на матрицу возможных вариантов с более подробной информацией:

http://www.zmanda.com/blogs/?p=19

Это, по существу, сводится к системе хранения данных, которые вы используете, и сколько аппаратных средств вы имеете в наличии.

2

Отчасти это зависит от того, используете ли вы innodb или myiasm. Для innodb; MySql имеет свой собственный (который стоит денег) решения для этого (InnoDB горячей копии), но есть открытая версия источника от Percona вы можете посмотреть по адресу:

http://www.percona.com/doc/percona-xtrabackup/

1

Если у вас есть действительно большие (50G + как я) базы данных MySQL MyISAM, вы можете использовать блокировки и rsync. В соответствии с документацией MySQL вы можете безопасно копировать необработанные файлы, в то время как блокировка чтения активна, и вы не можете делать это с помощью InnoDB. Таким образом, если целью является нулевым временем простоя и у вас есть дополнительные HD пространство, создать сценарий:

rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync 

Затем выполните следующие действия:

  1. ли flush tables
  2. Выполнить скрипт
  3. ли flush tables with read lock;
  4. Сценарий запуска снова
  5. Do unlock tables;

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

  1. Сделайте еще rsync от /tmp/mysql/sync до удаленного сервера, сжимайте, храните инкрементные версии, что угодно.
+0

Интересное решение. Можете ли вы подтвердить, что восстановление из этих резервных копий работает? (Вам приходилось использовать резервные копии для восстановления в чрезвычайной ситуации? Были ли у вас какие-либо проблемы или сюрпризы во время восстановления?) – rinogo

+0

Это не резервная копия, а реальная точная копия данных MySQL, поэтому не удивительно. Я использовал этот метод при переходе с одного сервера на другой. – sekrett

Смежные вопросы