Mysqldump в несколько гигабайт

Материал из support.qbpro.ru
Версия от 15:27, 17 ноября 2015; imported>Supportadmin
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Источник: 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, может быть есть какой-то более простой способ следить за заливкой дампа в базу?