2009-04-26 4 views
4

Какой самый быстрый способ экспортировать/импортировать базу данных mysql, используя таблицы innodb?Какой самый быстрый способ импортировать большую резервную копию базы данных mysql?

У меня есть производственная база данных, которую мне периодически нужно загрузить на мою машину разработки, чтобы отлаживать проблемы клиентов. То, как мы сейчас это делаем, - это загрузить наши регулярные резервные копии баз данных, которые генерируются с использованием «mysql -B dbname», а затем gzipped. Затем мы импортируем их с помощью «gunzip -c backup.gz | mysql -u root».

Из того, что я могу сказать, прочитав «mysqldump --help», mysqldump запускает wtih -opt по умолчанию, который выглядит так, будто он включает кучу вещей, которые я могу думать об этом, что сделает импорт быстрее, как отключение индексов и импорт таблиц как один массивный оператор импорта.

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

Примечание: Я в основном хочу оптимизировать время, необходимое для загрузки базы данных на мою машину разработки (относительно недавний macbook pro, с большим количеством бара). Время резервного копирования и время передачи по сети в настоящее время не являются большими проблемами.

Update:

Чтобы ответить на некоторые вопросы, заданные в ответах:

  • Схема базы данных производства изменяется до пару раз в неделю. Мы используем рельсы, поэтому относительно легко запускать скрипты переноса на устаревших данных о производстве.

  • Мы должны помещать производственные данные в среду разработки потенциально ежедневно или ежечасно. Это полностью зависит от того, над чем работает разработчик. У нас часто возникают конкретные проблемы с клиентами, которые являются результатом распространения данных по нескольким таблицам в db, которые необходимо отлаживать в среде разработки.

  • Я честно не знаю, сколько времени занимает mysqldump. Менее 2 часов, так как мы в настоящее время запускаем его каждые 2 часа. Однако это не то, что мы пытаемся оптимизировать, мы хотим оптимизировать импорт на рабочую станцию ​​разработчика.

  • Нам не нужна полная производственная база данных, но не совсем тривиально отделять то, что мы делаем и не нуждаемся (существует множество таблиц с отношениями внешнего ключа). Скорее всего, нам придется идти в конце концов, но мы бы хотели избежать этого немного дольше, если можем.

ответ

3

Это зависит от того, как вы определяете «самый быстрый».

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

Соответствующие вопросы:

Как часто ваша продукция изменение схемы базы данных?

Примечание: Я имею в виду добавление, удаление или переименование таблиц, столбцов, представлений и т. Д., Т.е. вещей, которые нарушают фактический код.

Как часто вам нужно помещать производственные данные в среду разработки?

По моему опыту, не очень часто. Обычно я обнаружил, что раз в месяц более чем достаточно.

Как долго длится mysqldump?

Если это менее 8 часов, это можно сделать за одну ночь в качестве задания cron. Задача решена.

Вам нужны все данные?

Другим способом оптимизации этого является просто получение соответствующего подмножества данных. Конечно, для этого требуется, чтобы пользовательский сценарий записывался, чтобы получить подмножество объектов и всех соответствующих связанных объектов, но при этом даст самый быстрый конечный результат. Сценарий также должен поддерживаться посредством изменений схемы, поэтому это трудоемкий подход, который следует использовать в качестве крайней последней меры. Образцы продукции должны быть достаточно большими, чтобы включать достаточно широкую выборку данных и выявлять любые потенциальные проблемы с производительностью.

Заключение

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

+0

Я ответил на ваши вопросы как редактирование на мой вопрос. Вы делаете хорошие моменты. Я не отказался от mysqldump, я больше задаюсь вопросом, есть ли способ оптимизировать его, помимо использования значений по умолчанию, учитывая мою ситуацию (оптимизация скорости импорта). –

2

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

Другим вариантом, который может быть стоит посмотреть, является XtraBackup от известных специалистов по производительности MySQL Percona. Это онлайн-решение для резервного копирования для InnoDB. Однако я не смотрел на него сам, поэтому я не буду ручаться за его стабильность или что это даже приемлемое решение для вашей проблемы.

+1

Проблема с репликацией в этом сценарии заключается в том, что разработка обычно изменяет базу данных dev. ИМХО - полное решение - подходящее решение. – cletus

+0

Согласен. Это правильный вопрос. –

Смежные вопросы