Восстановление выборочных таблиц из всего дампа базы данных?

У меня есть дамп mysql, созданный с помощью mysqldump, который содержит все таблицы в моей базе данных и все их данные. Однако я хочу восстановить только две таблицы. (давайте назовем их kittens и kittens_votes)

Как мне восстановить эти две таблицы, не восстанавливая всю базу данных?


person Malfist    schedule 04.01.2011    source источник


Ответы (5)


Итак, у вас есть три основных варианта.

  1. Вы можете вручную найти операторы SQL в файле, относящиеся к резервным копиям таблиц, и скопировать их вручную. Преимущество этого заключается в простоте, но для больших резервных копий это непрактично.

  2. Восстановите базу данных во временную базу данных. По сути, создайте новую базу данных, восстановите ее в этой базе данных, а затем скопируйте данные оттуда в старую. Это будет хорошо работать только в том случае, если вы делаете резервные копии одной базы данных (если в файле резервной копии нет команд CREATE DATABASE).

  3. Восстановите базу данных на новый сервер базы данных и скопируйте оттуда. Это хорошо работает, если вы делаете полные резервные копии сервера, а не отдельные резервные копии базы данных.

Какой из них вы выберете, будет зависеть от конкретной ситуации (включая объем имеющихся у вас данных)...

person ircmaxell    schedule 04.01.2011
comment
Я боялся, что мне придется это сделать, я сделал вариант № 2 - person Malfist; 04.01.2011

Например, вы можете разобрать CREATE TABLE kittens|kitten_votes И INSERT INTO ... с помощью регулярного выражения и выполнить только эти операторы. Насколько я знаю, другого способа "частично восстановить" из дампа нет.

person German Rumm    schedule 04.01.2011

Откройте файл .sql и скопируйте операторы вставки для нужных таблиц.

person steve    schedule 04.01.2011
comment
У меня есть доступ только к командной строке сервера, на котором находится дамп, так что это может быть немного сложно. - person Malfist; 04.01.2011
comment
Это может быть невыносимо, если дамп многогигабайтный. - person spacediver; 29.11.2012

создайте нового пользователя с доступом только к этим 2 таблицам. Теперь восстановите БД с опцией -f (force), которая будет игнорировать ошибочные операторы и выполнять только те операторы, на которые у него есть разрешение.

person shantanuo    schedule 05.01.2011

То, что вы хотите, это «Восстановление одной таблицы»

http://hashmysql.org/wiki/Single_table_restore

Несколько вариантов изложены выше... Однако тот, который сработал для меня, был:

  • Создать новую БД

$ mysql -u root -p СОЗДАТЬ БАЗУ ДАННЫХ temp_db

  • Вставьте файл .sql (тот, который содержит нужную таблицу) в новую БД.

$ mysql -u root -p temp_db ‹ ~/полный/путь/к/вашему_файлу_базы_данных.sql

  • дамп нужной таблицы

$ mysqldump -u root -p temp_db awesome_single_table > ~/awesome_single_table.sql

  • импортировать нужную таблицу

$ mysql -u root -p исходная_база данных ‹ ~/awesome_single_table.sql

Затем удалите temp_db, и все у вас получится!

person carl crott    schedule 12.10.2012