Управление гигантскими файлами дампа MySQL - PullRequest
5 голосов
/ 12 ноября 2008

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

Ответы [ 5 ]

11 голосов
/ 12 ноября 2008

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

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

Кто-нибудь хочет пойти и сделать это здесь?

Еще один бит, который может помочь запустить цикл bash:

grep -n "CREATE TABLE " dump.sql  | tr ':`(' '  ' | awk '{print $1, $4}'

Это дает вам хороший список номеров строк и имен таблиц, таких как:

200 FooTable
269 BarTable
9 голосов
/ 12 ноября 2008

Спасите себя от хлопот и используйте mysqldump -T, если можете.

Из документации :

- вкладка = путь, -T путь

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

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

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

4 голосов
/ 11 февраля 2010

Этот сценарий оболочки захватит нужные вам таблицы и передаст их splitted.sql.

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

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

2 голосов
/ 20 октября 2009

Maatkit кажется вполне подходящим для этого с mk-parallel-dump и mk-параллель-restore .

0 голосов
/ 26 июня 2013

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

split -l 1000 import.sql splited_file

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

Надеюсь, это кому-нибудь поможет

...