2010-02-26 6 views
52

Ist es möglich, eine einzelne Datenbank von einem --all-databases mysqldump zu importieren? Ich denke, ich kann die Datei manuell ändern, frage mich aber, ob es irgendwelche Befehlszeilenoptionen dafür gibt.Importieren einer einzelnen Datenbank von --all-databases dump

Ich ziehe Server um und habe viele Datenbanken, von denen ich die meisten momentan nicht benötige oder im Moment brauche, aber ich möchte die Möglichkeit haben, eine einzelne wiederherzustellen, wenn es nötig ist.

Antwort

70

mysqldump Ausgabe ist nur eine Reihe von SQL Aussagen.

Sie können die gewünschte Datenbank in der Befehlszeile zur Verfügung stellen und die Befehle für die anderen Datenbanken überspringen mit:

mysql -D mydatabase -o < dump.sql 

Dies wird nur die Befehle auszuführen, wenn mydatabase in Gebrauch ist

+0

Danke für die schnelle Antwort! Genial. – savageguy

+2

Sehr nützlich für mich, Danke !! Sie können --disable-keys hinzufügen, um Fehler von Fremdschlüsseln zu vermeiden;) mysql -u user -D - disable-keys database -o davidselo

+15

Das ist eine sehr rücksichtslose und unglaublich gefährliche Antwort. Wenn Sie 'mysqldump --all-databases' starten, enthält die mysqldump-Ausgabe' DROP DATABASE IF EXISTS dbname; CREATE DATABASE Datenbankname; USE dbname; 'für jede Datenbank in der MySQL-Instanz, einschließlich des MySQL-Schemas. Bitte schauen Sie sich die mysqldump-Dokumentation an: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_all-databases. Das bedeutet, dass jede Datenbank gnadenlos überschrieben wird. Kannst du beweisen, dass es die gesamte Datenbank überspringt ??? HINWEIS: Sie können dies für Binärlogs mit mysqlbinlog tun. – RolandoMySQLDBA

48

Sie die verwenden können, folgenden Befehl ein:

mysql -u root -p --one-database destdbname < alldatabases.sql 

Wo destdbname Ihre gewünschte Datenbank, die Sie wiederherstellen möchten.

Eine weitere Option, die IMHO viel sicherer ist, ist die DB aus einem --all-databases Dump extrahieren. Beispiel:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql 

ersetzen dbname mit den gewünschten Datenbanknamen. alldatabases.sql ist der Name Ihrer sql-dump-Datei. Auf diese Weise haben Sie die getrennte DB in der Datei und können dann mit einem einfachen mysql-Befehl wiederherstellen.

Viel Glück

(Credits geht an: Darren Mothersele - his page sehen)

+2

Große Lösung! Ich musste den Original-Dump-Header hinzufügen, um einige Fehler zu vermeiden ... – neuro

Verwandte Themen