Как-то пришлось мне восстанавливать всего то несколько баз из полного бэкапа mysql, который содержал в себе все базы.
Довольно долго сканировал интернет и кое что нашлось.
Ниже будет приведён код скрипта, который мне в этом очень помог.
Но, отработал он у меня корректно только на linux, на freebsd что-то у него не получалось.

Cкрипт предназначен для разрезания MySQL-дампа с несколькими базами на отдельные базы.

Файлы именуются по принципу: название_базы.номер_в_общем_дампе.sql

Использование

./db_split.sh файл_дампа.sql каталог_куда_складывать_дампы


Скрипт

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash                                                                                                                   
# By Rain ;)
 
# Создан 2008-04-01
# Изменен 2008-04-17: добавлено описание
# Изменен 2008-04-18: добавлено удаление "USE DATABASE" в начале дампов
# Изменен 2009-06-08: переписал с использованием awk
 
# Проверка передачи переменных (да-да, примитивно, но надо ж ему хоть что-то проверять? :))
[ -z "$2" ]     &&      echo "Error: directory is not set" && exit 1
[ ! -d "$2" ]   &&      echo "Error: $2 not a directory" && exit 1
 
# Весь процесс
awk '/^CREATE DATABASE/{nodb+=1; print "Processing DB "nodb"..."}; {print >> "'$2'/"nodb".sql"}' "${1}"
 
echo -e "Renaming dumps..."
ls -1 ${2}/*.sql |
while read file
        do      
                dumpname="$(head -n1 "${file}" |  sed -re "s/^CREATE DATABASE|[\` ;]//g" -e "s@/\\*[\!a-zA-Z0-9_ ]*\*\/@@g")"
                sed  -i -n '/^CREATE DATABASE/,/^USE/!p' "${file}"
# Конечно, вряд ли окажутся 2 базы с одним именем, но кто знает...
                [ ! -e "${file%/*}/${dumpname}.sql" ] && mv "${file}" "${file%/*}/${dumpname}.sql"
done
echo "All done"

Не забываем сделать скрипт исполняемым chmod +x ./db_split.sh

Использованы материалы сайта linuxoid.in