2010-02-26 2 views
52

Можно ли импортировать одну базу данных из -all-баз данных mysqldump? Я думаю, я могу изменить файл вручную, но задаюсь вопросом, есть ли какие-либо параметры командной строки для этого.Импорт отдельной базы данных из дампа -all-баз данных

Я перемещаю серверы и имею множество баз данных, большинство из которых в настоящее время я не нуждаюсь или не хочу в данный момент, но хотел бы иметь возможность восстановить один, если потребуется.

ответ

70

mysqldump вывод - всего лишь набор SQL утверждений.

Вы можете обеспечить нужную базу данных в командной строке и пропустить команды против других баз данных с помощью:

mysql -D mydatabase -o < dump.sql 

Это будет только выполнять команды, когда mydatabase используется

+0

Спасибо за быстрый ответ! Потрясающие. – savageguy

+2

Очень полезно для меня, спасибо! вы можете добавить --disable-keys, чтобы избежать ошибок внешних ключей;) mysql -u user -D -disable-keys database -o davidselo

+15

Это ответ очень безрассудный и невероятно опасный. Если вы запустите mysqldump -all-databases', вывод mysqldump будет содержать 'DROP DATABASE IF EXISTS dbname; CREATE DATABASE dbname; USE dbname; 'для каждой базы данных в экземпляре MySQL, включая схему mysql. Посмотрите документацию mysqldump: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_all-databases. Это означает, что каждая база данных будет беспощадно переписываться. Можете ли вы предоставить доказательство того, что он будет пропускать всю базу данных, кроме одного? ПРИМЕЧАНИЕ. Вы можете сделать это для двоичных журналов, используя mysqlbinlog. – RolandoMySQLDBA

48

Вы можете использовать следующая команда:

mysql -u root -p --one-database destdbname < alldatabases.sql 

Где destdbname это нужная база данных, которое вы хотите восстановить.

Другой вариант, который является ИМХО гораздо безопаснее, заключается в извлечении БД из дампа --all-databases. Пример:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql 

Заменить dbname с требуемым именем базы данных. alldatabases.sql - это имя вашего файла sql-dump. Таким образом, у вас будет отдельная БД в файле, а затем вы сможете восстановить с помощью простой команды mysql.

Успехов

(Кредиты идет на: Даррен Mothersele - см his page)

+2

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