Mysqldump в несколько гигабайт
Источник: http://ru-shell.livejournal.com/31675.html
Недавно мне пришлось восстанавливать из бекапа дамп mysql-базы размером в пару гигов. Оставив mysql -p --database xxx < dump.sql на ночь я был чертовски огорчен на следующий день, поскольку
1) восстановление из дампа не было закончено;
2) не было понятно в каком именно месте оно затупило.
Было решено разбить дамп на кучу файлов по одной таблице на файл, а их в свою очередь (если они всё равно получаются слишком большие) разбить на кучу файлов по одному insert на файл (mysqldump, которым делался бекап, пишет ограниченное количество данных на один инсерт).
Погуглив и успешно выполнив эту задачу, на всякий случай опишу используемые инструменты под катом.
Для разбивки одного дампа базы на дампы таблиц можно использовать вот такой скрипт:
cat dump.sql | awk 'BEGIN { output = "comments"; } $data ~ /^CREATE TABLE/ { close(output); output = substr($3,2,length($3)-2); } { print $data >> output }'
На выходе получим по одному файлу на каждую таблицу. Для разбивки такого файла по инсертам можно использовать вот такой скрипт:
awk '/INSERT/{if (n) close(output); output= f n++} n {print >> output }' f=prefix tbl.dump.sql
Затем я запустил
for i in prefix*; do mysql --password=****** --database=mydb < $i; echo "$i done"; done
Может быть я слишком плохо знаком с консольными утилитами для работы с mysql, может быть есть какой-то более простой способ следить за заливкой дампа в базу?