У меня есть резервная копия mysqldump моей базы данных mysql, состоящей из всех наших таблиц, которая составляет около 440 мегабайт. Я хочу восстановить содержимое только одной из таблиц формы mysqldump. Это возможно? Теоретически, я мог бы просто вырезать раздел, который перестраивает таблицу, которую я хочу, но я даже не знаю, как эффективно редактировать текстовый документ такого размера.
194
Ответы:
Вы можете попробовать использовать sed, чтобы извлечь только ту таблицу, которую вы хотите.
Допустим, имя вашей таблицы
mytable
и файл mysql.dump - это файл, содержащий ваш огромный дамп:Это скопирует в файл
mytable.dump
то, что находится междуCREATE TABLE mytable
следующей и следующей,CREATE TABLE
соответствующей следующей таблице.Затем вы можете настроить файл,
mytable.dump
который содержит структуру таблицыmytable
и данные (списокINSERT
).источник
Table structure for table
комментарию, а не сопоставлять по CREATE TABLE. Это гарантирует, что следующая таблица не будет удалена, если кто-то забудет удалить ее оператор DROP TABLE, и позволит использовать конвейер для восстановления таблицы с одной командой (gzip | sed | mysql). Однако это решение зависит от синтаксиса комментариев mysqldump (я не знаю, насколько он стандарт).Я использовал модифицированную версию команды sed uloBasEI. Он включает в себя предыдущую команду DROP и читает, пока mysql не выполнит сброс данных в вашу таблицу (UNLOCK). У меня работал (ре) импорт wp_users на кучу сайтов Wordpress.
источник
`mytable`
чтобы избежать совпадения таблицmytable2
и т. Д., Как было в моем случае.sed
не должно мешать кодированию ...DROP TABLE
(у моего дампа MySQL этого не было) может потребоваться использовать: здесьsed -n -e '/-- Table structure for table ``<Table Name>/,/UNLOCK TABLES/p' <SQL File> > table.sql
используются комментарии к таблицам, представленные перед каждой таблицей в дампе MySQl, и обеспечиваются такие строки, как/*!40101 SET @saved_cs_client = @@character_set_client */;
get include .Это можно сделать проще? Вот как я это сделал:
Создать временную базу данных (например, восстановить):
Восстановите полный дамп в базе данных temp:
Дамп таблицы, которую вы хотите восстановить:
Импортировать таблицу в другую базу данных:
источник
Простым решением было бы просто создать дамп только таблицы, которую вы хотите восстановить отдельно. Вы можете использовать команду mysqldump для этого со следующим синтаксисом:
Затем импортируйте его как обычно, и он будет импортировать только выгруженную таблицу.
источник
Так или иначе, любой выполняющий процесс должен будет просмотреть весь текст дампа и каким-то образом его проанализировать. Я бы просто за
и передать вывод в MySQL. Взгляните на первую таблицу в дампе, чтобы убедиться, что вы правильно сделали INSERT.
Изменить: ОК, на этот раз получил правильное форматирование.
источник
Вы должны попробовать команду @bryn, но с разделителем `в противном случае вы также извлечете таблицы, содержащие префикс или суффикс, это то, что я обычно делаю:
Также для целей тестирования вы можете изменить имя таблицы перед импортом:
Для импорта вы можете использовать команду mysql:
источник
Резервное копирование
Восстановить одну таблицу
источник
Один из возможных способов справиться с этим - восстановить временную базу данных и вывести только эту таблицу из временной базы данных. Затем используйте новый скрипт.
источник
Этот инструмент может быть то, что вы хотите: tbdba-restore-mysqldump.pl
https://github.com/orczhou/dba-tool/blob/master/tbdba-restore-mysqldump.pl
Например, восстановить таблицу из файла дампа базы данных:
источник
Это лучшее решение, чем некоторые другие, описанные выше, потому что не все дампы SQL содержат
DROP TABLE
оператор. Этот будет работать все виды свалок.источник
Это тоже может помочь.
источник
Таблица должна иметь одинаковую структуру как в дампе, так и в базе данных.
или
источник
Большинство современных текстовых редакторов должны иметь возможность обрабатывать текстовые файлы такого размера, если ваша система соответствует этому.
Во всяком случае, мне пришлось сделать это очень быстро, и у меня не было времени, чтобы найти какие-либо инструменты. Я установил новый экземпляр MySQL, импортировал всю резервную копию и затем выплюнул только ту таблицу, которую хотел.
Затем я импортировал эту таблицу в основную базу данных.
Это было утомительно, но довольно легко. Удачи.
источник
Вы можете использовать редактор vi. Тип:
открыть как весь дамп, так
mysql.dump
и новый файлmytable.dump
. Найдите нужную вставку в строку, нажав,/
а затем введите фразу, например: «вставить в` mytable` ", затем скопируйте эту строку, используяyy
. Переход к следующему файлуctrl+w
затемdown arrow key
вставьте скопированную строку сpp
. Наконец, сохраните новый файл, набрав:wq
и достаточно редактора vi:q
.Обратите внимание , что если вы сбросили данные с помощью нескольких вставок можно скопировать (дернул) все из них сразу , используя ,
Nyy
в которомN
есть число строк , которые будут скопированы.Я сделал это с файлом размером 920 МБ.
источник
Получить хороший текстовый редактор, как Notepad ++ или Vim (если вы уже владеете им). Найдите имя таблицы, и вы сможете выделить только команды CREATE, ALTER и INSERT для этой таблицы. Навигация может быть проще с помощью клавиатуры, а не мыши. И я бы позаботился о том, чтобы у вас было достаточно памяти или ОЗУ, чтобы не было проблем с загрузкой всего файла сразу. Как только вы выделите и скопируете нужные вам строки, было бы неплохо сделать резервную копию только скопированной части в свой собственный файл резервной копии, а затем импортировать ее в MySQL.
источник
Блоки SQL блокируются с помощью «Структура таблицы для таблицы
my_table
» и «Сброс данных для таблицыmy_table
».Вы можете использовать командную строку Windows следующим образом, чтобы получить номера строк для различных разделов. Настройте искомую строку по мере необходимости.
найти / n "для таблицы` "sql.txt
Будет возвращено следующее:
---------- SQL.TXT
[4384] - Структура таблицы для таблицы
my_table
[4500] - Сброс данных для таблицы
my_table
[4514] - Структура стола для стола
some_other_table
... и т.д.
Это даст вам номера строк, которые вам нужны ... сейчас, если бы я только знал, как их использовать ... расследование.
источник
Еще в 2008 году мне тоже нужно было это сделать. Я написал Perl-скрипт, который это сделает, и теперь это мой метод выбора. Также кратко изложено, как сделать это в awk или как восстановить в другом месте и извлечь. Недавно я добавил этот метод sed в список. Вы можете найти скрипт и другие методы здесь: http://blog.tsheets.com/2008/tips-tricks/extract-a-single-table-from-a-mysqldump-file.html
источник
Я попробовал несколько вариантов, которые были невероятно медленными. Это разделило дамп на 360 ГБ на его таблицы за несколько минут:
Как разделить вывод из mysqldump на файлы меньшего размера?
источник
Упомянутые ранее решения «sed» хороши, но, как уже упоминалось, не на 100% безопасны
У вас могут быть команды INSERT с данными, содержащими: ... CREATE TABLE ... (что угодно) ... mytable ...
или даже точную строку "CREATE TABLE` mytable`; " например, если вы храните команды DML!
(и если таблица огромная, вы не хотите проверять это вручную)
Я бы проверил точный синтаксис используемой версии дампа и провел бы более строгий поиск по шаблону:
Избегайте ". *" И используйте "^", чтобы убедиться, что мы начинаем с начала строки. И я бы предпочел взять начальный «DROP»
В целом, это работает лучше для меня:
источник