Каков самый простой способ получить данные для одной таблицы, удалить одну таблицу или разбить весь файл дампа на файлы, каждый из которых содержит отдельные таблицы? Я, как правило, в конечном итоге делаю много перемешивания vi regex, но я уверен, что есть простые способы сделать это с помощью awk/perl и т. Д. Первая страница результатов Google возвращает кучу неработающих perl-скриптов.Манипулирование гигантскими файлами дампа MySQL
ответ
Сэкономить много хлопот и использовать mysqldump -T
, если можно.
Из documentation:
--tab = путь, -T путь
Produce вкладки разделенных файлов данные. Для каждой выгруженной таблицы mysqldump создает файл tbl_name.sql, содержащий оператор CREATE TABLE , который создает таблицу, и файл tbl_name.txt, содержащий его данные . Значение параметра - это каталог для записи файлов.
По умолчанию файлы данных .txt форматируются с использованием символов табуляции между значениями столбцов и новой строкой в конце каждой строки. Формат может быть указан явно с использованием опций -fields-xxx и - лимитированных строк.
Примечание
Этот параметр должен использоваться только при запуске mysqldump на той же машине, что и сервер mysqld. Вы должны иметь привилегию FILE, и сервер должен иметь разрешение на запись файлов в указанном вами каталоге .
Когда мне нужно вытащить одну таблицу из дампа sql, я использую комбинацию grep, head и tail.
Например:
grep -n "CREATE TABLE" dump.sql
Это то дает номер строки для каждого из них, так что если ваша таблица находится на линии 200 и один после на линии 269, я:
head -n 268 dump.sql > tophalf.sql
tail -n 69 tophalf.sql > yourtable.sql
Я бы предположил, что вы можете расширить эти принципы, чтобы сбить сценарий, который разбил бы все это на один файл за стол.
Кто-нибудь хочет сделать это здесь?
Еще один бит, который может помочь начать цикл Баша Собирается:
grep -n "CREATE TABLE " dump.sql | tr ':`(' ' ' | awk '{print $1, $4}'
Это дает хороший список номера строк и имена таблиц, такие как:
200 FooTable
269 BarTable
Maatkit кажется вполне подходящим для этого с mk-parallel-dump и mk-parallel-restore.
This shell script возьмет нужные вам таблицы и передаст их splitted.sql
.
Он способен понимать регулярные выражения, поскольку я добавил параметр sed -r
.
Также MyDumpSplitter может разделить дамп на отдельные свалки.
Я немного опаздываю на это, но если это может помочь кому-либо, мне пришлось разделить огромный файл дампа SQL, чтобы импортировать данные на другой сервер Mysql. то, что я закончил, было разделение файла дампа с помощью системной команды.
Раскол -l 1000 import.sql splited_file
выше будет разбить файл SQL каждые 1000 строк.
Надеется, что это помогает кто-то
Выходу головки может быть просто конвейер хвоста - это не плохая идея – deadprogrammer 2008-11-12 23:01:41
Довольно интересное решение, но maatkit может сделать то же самое и даже больше: D – 2010-05-22 23:17:49