2009-10-06 2 views
3

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

+0

Следует ли перенести его на serverfault.com? – Kimvais

+0

@ Кимваис: Да, я бы так подумал. Также есть ответы? –

+0

Я регулярно нахожусь на ответах на этот вопрос, включая свои собственные. Внешняя память. : P –

ответ

7

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

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

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

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

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

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

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

+0

На самом деле нет «правильного» способа. Как справедливо отмечает Флубба, mysqldump блокирует таблицы, что может быть неприятно в производстве. Это также медленнее, чем, например, mysqlhotcopy. –

3

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

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

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

5

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

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

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

+0

Этот комментарий мне очень помог. Я не знал о опции -single-transaction, и если вы добавите опцию -quick для больших БД, она отлично работает! Спасибо. – KSolo

2

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

+0

Да, это хорошее решение, но это не просто резервное решение! Он также мог бы добиться этого, написав резервный скрипт и выполнив его на повторной основе. – nickhar

+0

Согласовано, но phpMyAdmin - популярный инструмент, и мой ответ больше подходит для аудитории, чем тот, кто задал вопрос (кто может использовать этот инструмент). – ForumLeech