Пропустить все базы данных и запустить только конкретную - PullRequest
1 голос
/ 09 марта 2010

У меня есть файл sql, сгенерированный "mysqldump --all-database". В нем много баз данных. Что я хочу сделать, это обновить мою локальную базу данных, но только конкретную, а не все. Я пытался использовать "mysql -database = db_name

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

Вы можете попробовать сделать:

mysql -D example_database -o < dump.sql

Это только выполнит команды SQL для указанной базы данных и пропустит команды для всех других баз данных. Параметр -o («одна база данных») является критическим для этой работы должным образом (он указывает mysql игнорировать операторы, относящиеся к другим базам данных).

dump.sql является результатом выполнения mysqldump --all-databases

0 голосов
/ 09 марта 2010

Пара идей:

  1. Вы можете редактировать файл дампа (в конце концов, это просто текстовый файл), извлекая только элементы, относящиеся к базе данных, которую вы хотите восстановить. Я думаю, что каждая база данных записывается в файл индивидуально, так что это вопрос идентификации одного большого блока, связанного с тем, который вам нужен, и удаления битов до и после него - например, не столько хлопот, сколько кажется. Посмотрите на операторы create database и use (есть также - по крайней мере, в моей версии, с моими параметрами) баннерный комментарий "Текущая база данных: foo" в верхней части каждого раздела). Это было бы довольно легко сделать с vi или чем-то еще, что позволяет легко выполнять большие операции. Затем вы можете выполнить поиск по результату, убедившись, что нет перекрестных ссылок на БД, которые вы не хотите обновлять.

  2. Вы можете создать резервную копию баз данных, которые вы не хотите обновлять, выполнить обновление, а затем восстановить их. Я имею в виду, прежде чем делать подобные вещи, у вас все равно есть резервная копия, верно? ; -)

  3. Вы можете восстановить пустой экземпляр MySQL, а затем получить резервную копию того, который вам нужен. Blech.

  4. (вариант №3) Вы можете переименовать все ваши текущие базы данных, импортировать файл, затем отбросить ненужные и переименовать оригиналы обратно. Также блех.

Я бы, наверное, пошел с # 1 (после полного резервного копирования). Удачи с этим.

Редактировать Нет, я бы пошел с решением codaddict -D databasename -o (после полного резервного копирования). Хороший

0 голосов
/ 09 марта 2010

становится грязным, прекрати читать, если или будешь предупрежден;)

Это не красиво и, возможно, есть лучший (правильный) способ добиться этого. Но если предположить, что дампы, с которыми вы работаете, невелики, вы можете быстрее импортировать полный дамп во временные БД и создать новый дамп базы данных, которую вы хотите импортировать. (Как я уже сказал, не очень)

Кроме того, вы должны быть уверены, что сможете восстановить резервные копии, которые вы делаете (любым мыслимым способом). Это может действительно смущать день, когда они вам нужны срочно.

...