Лучшая практика резервного копирования базы данных
Я поддерживаю большую базу данных 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. Второй запуск будет очень коротким, он будет только задерживать запросы на запись, поэтому это реальное нулевое решение простоя.
- Сделайте еще один
rsync
с /tmp/mysql/sync
на удаленный сервер, скомпилируйте, сохраните инкрементные версии, что угодно.
Ответ 4
То, что вы хотите сделать, называется "онлайн-резервное копирование". Здесь указатель на матрицу возможных опций с дополнительной информацией:
http://www.zmanda.com/blogs/?p=19
Это, по сути, сводится к используемому бэкенду хранилища и тому количеству оборудования, которое у вас есть.