2008-11-12 3 views
5

Каков самый простой способ получить данные для одной таблицы, удалить одну таблицу или разбить весь файл дампа на файлы, каждый из которых содержит отдельные таблицы? Я, как правило, в конечном итоге делаю много перемешивания vi regex, но я уверен, что есть простые способы сделать это с помощью awk/perl и т. Д. Первая страница результатов Google возвращает кучу неработающих perl-скриптов.Манипулирование гигантскими файлами дампа MySQL

ответ

9

Сэкономить много хлопот и использовать mysqldump -T, если можно.

Из documentation:

--tab = путь, -T путь

Produce вкладки разделенных файлов данные. Для каждой выгруженной таблицы mysqldump создает файл tbl_name.sql, содержащий оператор CREATE TABLE , который создает таблицу, и файл tbl_name.txt, содержащий его данные . Значение параметра - это каталог для записи файлов.

По умолчанию файлы данных .txt форматируются с использованием символов табуляции между значениями столбцов и новой строкой в ​​конце каждой строки. Формат может быть указан явно с использованием опций -fields-xxx и - лимитированных строк.

Примечание
Этот параметр должен использоваться только при запуске mysqldump на той же машине, что и сервер mysqld. Вы должны иметь привилегию FILE, и сервер должен иметь разрешение на запись файлов в указанном вами каталоге .

11

Когда мне нужно вытащить одну таблицу из дампа 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 
+0

Выходу головки может быть просто конвейер хвоста - это не плохая идея – deadprogrammer 2008-11-12 23:01:41

+0

Довольно интересное решение, но maatkit может сделать то же самое и даже больше: D – 2010-05-22 23:17:49

4

This shell script возьмет нужные вам таблицы и передаст их splitted.sql.

Он способен понимать регулярные выражения, поскольку я добавил параметр sed -r.

Также MyDumpSplitter может разделить дамп на отдельные свалки.

0

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

Раскол -l 1000 import.sql splited_file

выше будет разбить файл SQL каждые 1000 строк.

Надеется, что это помогает кто-то