Что мне нужно учитывать при резервном копировании базы данных с миллионами записей? Есть ли какие-либо инструменты (возможно, в комплекте с сервером MySQL), которые я мог бы использовать?Как сделать резервную копию базы данных MySQL?
ответ
В зависимости от ваших требований, есть несколько вариантов, которые я сам с помощью:
- , если вам не нужно горячее резервное копирование, остановить сервер БД и резервное копирование на уровне файловой системы, т.е.. е. используя tar, rsync или подобное.
- Если вам нужен сервер базы данных для продолжения работы, вы можете начать с инструмента mysqlhotcopy (скрипт perl), который блокирует резервные копии таблиц и позволяет вам выбирать отдельные таблицы и базы данных.
- если вы хотите резервного копирования, чтобы быть портативным, вы можете захотеть использовать mysqldump, который создает сценарии SQL, чтобы восстановить данные, но медленнее, чем Mysqlhotcopy
- , если у вас есть копия БД в определенный момент в вы также можете просто сохранить бинлы (начиная с этого момента времени) где-нибудь в безопасности. Это может быть очень легко сделать и не мешает работе сервера, но может быть не самым быстрым для восстановления, и вы должны убедиться, что не пропустите часть журналов.
Методы Я не пробовал, но это имеет смысл для меня:
- , если у вас есть файловая система, как ZFS или работают на LVM, это может быть хорошей идеей, чтобы сделать снимок базы данных, выполнив моментальный снимок файловой системы, потому что они очень и очень быстрые. Просто не забудьте обеспечить согласованное состояние вашего db в течение всей операции, например. г. делая
FLUSH TABLES WITH READ LOCK
(и, конечно же, не забудьтеUNLOCK TABLES
впоследствии)
Дополнительно:
- вы можете использовать настройки мастер-подчиненный, чтобы повторить свой производственный сервер либо другой машине или второй экземпляр на той же машине и сделать любой из вышеперечисленных копий, оставив свою производственную машину в покое. Вместо того, чтобы работать непрерывно, вы также можете запускать ведомое устройство через регулярные промежутки времени, позволить ему прочитать binlog и снова отключить его.
- Я думаю, что кластер MySQL и лицензионная версия предприятия имеют больше инструментов, но я их никогда не пробовал.
Я думаю, что mysqldump - это правильный способ сделать это.
На самом деле нет «правильного» способа. Как справедливо отмечает Флубба, mysqldump блокирует таблицы, что может быть неприятно в производстве. Это также медленнее, чем, например, mysqlhotcopy. –
Остерегайтесь использования mysqldump на больших таблицах с использованием механизма хранения MyISAM; он блокирует выборки, пока дамп работает на каждой таблице, и в некоторых случаях это может занять занятые сайты в течение 5-10 минут.
Использование InnoDB, для сравнения, вы получаете неблокирующие резервные копии из-за его блокировки на уровне строк, так что это не такая проблема.
Если вам нужно использовать MyISAM, общая стратегия заключается в том, чтобы реплицировать второй экземпляр MySQL и вместо этого использовать mysqldump вместо реплицированной копии.
Mysqlhotcopy плохо описана - она работает только в том случае, если вы используете MyISAM, и это не горячо.
Проблема с mysqldump - это время, необходимое для восстановления резервной копии (но ее можно сделать горячей, если у вас есть все таблицы InnoDB, см. --single-transaction).
Я рекомендую использовать горячий инструмент для резервного копирования, как то, что доступно в XtraBackup: http://www.percona.com/docs/wiki/percona-xtrabackup:start
Этот комментарий мне очень помог. Я не знал о опции -single-transaction, и если вы добавите опцию -quick для больших БД, она отлично работает! Спасибо. – KSolo
Используйте вкладку экспорта в PhpMyAdmin. phpMyAdmin - бесплатный простой в использовании веб-интерфейс для администрирования MySQL.
Да, это хорошее решение, но это не просто резервное решение! Он также мог бы добиться этого, написав резервный скрипт и выполнив его на повторной основе. – nickhar
Согласовано, но phpMyAdmin - популярный инструмент, и мой ответ больше подходит для аудитории, чем тот, кто задал вопрос (кто может использовать этот инструмент). – ForumLeech
Следует ли перенести его на serverfault.com? – Kimvais
@ Кимваис: Да, я бы так подумал. Также есть ответы? –
Я регулярно нахожусь на ответах на этот вопрос, включая свои собственные. Внешняя память. : P –