Как сделать резервную копию базы данных MySQL? - PullRequest
3 голосов
/ 06 октября 2009

Что я должен учитывать при резервном копировании базы данных с миллионами записей? Существуют ли какие-либо инструменты (возможно, в комплекте с сервером MySQL), которые я мог бы использовать?

Ответы [ 5 ]

7 голосов
/ 06 октября 2009

В зависимости от ваших требований, я использовал несколько вариантов:

  • если вам не нужны горячие резервные копии, отключите сервер БД и выполните резервное копирование на уровне файловой системы, т.е. е. используя tar, rsync или аналогичный.
  • если вам нужно, чтобы сервер базы данных продолжал работать, вы можете начать с инструмента mysqlhotcopy (Perl-скрипт), который блокирует резервные копии таблиц и позволяет выбирать отдельные таблицы. и базы данных.
  • если вы хотите, чтобы резервная копия была переносимой, вы можете использовать mysqldump , которая создает сценарии SQL для воссоздания данных, но медленнее, чем mysqlhotcopy
  • если у вас есть копия БД в определенный момент времени, вы также можете просто хранить бинлоги (начиная с этого момента) где-нибудь в безопасности. Это может быть очень легко сделать и не мешать работе сервера, но может быть не самым быстрым для восстановления, и вы должны быть уверены, что не пропустите часть журналов.

Методы, которые я не пробовал, но для меня это имеет смысл:

  • если у вас есть файловая система, такая как ZFS, или вы работаете в LVM, было бы неплохо сделать снимок базы данных, сделав снимок файловой системы, потому что они очень, очень быстрые. Просто помните, чтобы обеспечить постоянное состояние вашего БД в течение всей операции, e. г. сделав FLUSH TABLES WITH READ LOCK (и, конечно, не забудьте потом UNLOCK TABLES)

Дополнительно:

  • вы можете использовать настройку ведущий-ведомый, чтобы реплицировать ваш производственный сервер на другой компьютер или второй экземпляр на том же компьютере, и выполнить любое из перечисленных действий с реплицированной копией, оставив свой рабочий компьютер в покое. Вместо того, чтобы работать непрерывно, вы также можете запускать ведомое устройство через равные промежутки времени, разрешать ему читать журнал и снова выключать его.
  • Я думаю, что у кластера MySQL и корпоративной лицензионной версии есть больше инструментов, но я никогда не пробовал их.
5 голосов
/ 21 февраля 2010

Mysqlhotcopy плохо описан - он работает, только если вы используете MyISAM, и он не горячий.

Проблема с mysqldump - это время, необходимое для восстановления резервной копии (но его можно сделать горячим, если у вас есть все таблицы InnoDB, см. --Single -action).

Я рекомендую использовать инструмент горячего резервного копирования, например, что доступно в XtraBackup: http://www.percona.com/docs/wiki/percona-xtrabackup:start

3 голосов
/ 06 октября 2009

Остерегайтесь использования mysqldump на больших таблицах с использованием механизма хранения MyISAM; он блокирует выборки во время выполнения дампа для каждой таблицы, и в некоторых случаях это может занять занятые сайты на 5-10 минут.

Для сравнения, используя InnoDB, вы получаете неблокирующие резервные копии из-за его блокировки на уровне строк, так что это не такая проблема.

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

2 голосов
/ 20 октября 2012

Используйте вкладку экспорта в phpMyAdmin. phpMyAdmin - это бесплатный простой в использовании веб-интерфейс для администрирования MySQL.

1 голос
/ 06 октября 2009

Я думаю, mysqldump - правильный способ сделать это.

...