Лучшая практика резервного копирования базы данных

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

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

Что лучше для этого?

Ответ 1

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

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

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

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

Здесь ссылка на документы на Репликация MySQL.

Ответ 2

Отчасти это зависит от того, используете ли вы innodb или myiasm. Для innodb; У mySQL есть свое (для чего стоит деньги) решение для этого (innodb hot copy), но есть версия с открытым исходным кодом от Percona, на которую вы можете посмотреть:

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

Ответ 3

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

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

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

  • Do flush tables
  • Запустить script
  • Do flush tables with read lock;
  • Запустите script снова
  • Do unlock tables;

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

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

Ответ 4

То, что вы хотите сделать, называется "онлайн-резервное копирование". Здесь указатель на матрицу возможных опций с дополнительной информацией:

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

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