Шинкуем массовый mysql дамп на отдельные базы

Как разделить общий дамп базы данных на отдельные файлы для каждой базы?

Чтобы не заморачиваться при резервном копировании базы данных, мы часто используем простую команду “mysqldump –all-databases”, которая генерирует дамп всех баз данных в виде одного длинного полотна. Однако, при необходимости восстановить данные частично, возникнут трудности выделения нужной базы из общего дампа.Чтобы разделить дамп на файлы, содержащие отдельные базы данных, можно воспользоваться приведённым ниже скриптом:

#!/usr/bin/perl -w
#
# splitmysqldump - split mysqldump file into per-database dump files.
use strict;
use warnings;
my $dbfile;
my $dbname = q{};
my $header = q{};
while (<>) {

# Beginning of a new database section:
# close currently open file and start a new one
if (m/-- Current Database\: \`([-\w]+)\`/) {
if (defined $dbfile && tell $dbfile != -1) {
close $dbfile or die "Could not close file!"
}
$dbname = $1;
open $dbfile, ">>", "$1_dump.sql" or die "Could not create file!";
print $dbfile $header;
print "Writing file $1_dump.sql ...\n";
}
if (defined

$dbfile && tell $dbfile != -1) {
print $dbfile $_;
}
# Catch dump file header in the beginning
# to be printed to each separate dump file.
if (!

$dbname) { $header .= $_; }
}
close $dbfile or die "Could not close file!"

Сохраняем данный скрипт в файл “splitmysqldump” и даём ему права на запуск.

chmod +x splitmysqldump

Чтобы выполнить разделение дампа, просто запустите скрипт с указанием пути к дампу. Нарезанные файлы будут сохранены в директории, откуда был запущен скрипт.

./splitmysqldump your-all-databases-files.sql

(Оригинал статьи на английском языке: http://yoodey.com/how-split-all-database-mysqldump-separate-each-databases-mysql)