Backups von großen Datenbankservern erreichen oftmals mehrere GigaByte. Ist die Anforderung, eine einzelne Datenbank aus einer sehr großen Datei zu extrahieren, scheitern Editoren an der Verarbeitung der Datenmengen. Alleine das Öffnen und Speichern dauern auf schnellen Rechnern jeweils dutzende Minuten.
Da sich auf Anhieb kein Skript für das Extrahieren einer einzelnen Datenbank aus einem kompletten Server-Backup finden ließ, habe ich selbst Hand angelegt und folgendes PHP-Skript für die Kommando-Zeile zusammen geschustert.
if ($argc != 4)
{
echo "usage: split.php < file source dump > < file target dump > < name of database >\n";
exit;
}
$completeFile = fopen($argv[1], "r") or exit("Unable to open source file!");
$newFile = fopen($argv[2], "w") or exit("Unable to create target file!");
$nameOfDatabase = $argv[3];
$writeFlag = true;
while(!feof($completeFile))
{
$currentLine = fgets($completeFile);
if (preg_match('/^\-{2}\sCurrent\sDatabase: `(.*?)`/', $currentLine, $treffer))
$writeFlag = $treffer[1] == $nameOfDatabase;
if ($writeFlag)
fputs($newFile, $currentLine);
echo (($writeFlag) ? '.' : '-');
}
fclose($completeFile);
fclose($newFile);
Vielleicht hilft es ja dem ein oder anderen.
Download als ZIP-Datei: mysql-dump-extract