Importieren Sie eine einzelne Datenbank aus dem Speicherauszug --all-database

77

Ist es möglich, eine einzelne Datenbank aus einem --all-database mysqldump zu importieren? Ich denke, ich kann die Datei manuell ändern, frage mich aber, ob es dafür Befehlszeilenoptionen gibt.

Ich bewege Server und habe viele Datenbanken, von denen ich die meisten derzeit nicht benötige oder möchte, aber die Option haben möchte, bei Bedarf eine einzelne wiederherzustellen.

savageguy
quelle

Antworten:

83

mysqldumpAusgabe ist nur eine Reihe von SQLAnweisungen.

Sie können die gewünschte Datenbank in der Befehlszeile bereitstellen und die Befehle für die anderen Datenbanken überspringen, indem Sie:

mysql -D mydatabase -o mydatabase < dump.sql

Dadurch werden die Befehle nur ausgeführt, wenn sie mydatabaseverwendet werden

Quassnoi
quelle
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 Benutzer -D --disable-keys database -o <dump.sql
davidselo
25
Diese Antwort ist sehr rücksichtslos und unglaublich gefährlich. Wenn Sie starten mysqldump --all-databases, enthält die Ausgabe von mysqldump DROP DATABASE IF EXISTS dbname; CREATE DATABASE dbname; USE dbname;für jede Datenbank in der MySQL-Instanz, einschließlich des MySQL-Schemas. Bitte lesen Sie die mysqldump-Dokumentation: dev.mysql.com/doc/refman/5.5/en/… . Das bedeutet, dass jede Datenbank gnadenlos überschrieben wird. Können Sie den Beweis erbringen, dass alle Datenbanken bis auf eine übersprungen werden? HINWEIS: Sie können dies mit mysqlbinlog für binäre Protokolle tun.
RolandoMySQLDBA
4
Für den Paranoiden habe ich zuerst einen Benutzer erstellt, der nur Rechte für die bestimmte Datenbank hatte, und dann diesen Befehl mit den Anmeldeinformationen dieses Benutzers ausgeführt. Beim Versuch, die Datenbank zu wechseln, ist ein Fehler aufgetreten, aber die Daten für die jeweilige Datenbank wurden beibehalten.
Topher
11
Diese Antwort ist falsch. Die Option -D hat keine Auswirkung beim Lesen von MySQL-Anweisungen aus einer von mysqldump --all-database generierten Datei. Außerdem werden Tabellen im MySQL-Schema, einschließlich der Benutzertabelle, TROPFEN und ERSTELLEN.
Jah
96

Sie können den folgenden Befehl verwenden:

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

Wo destdbnameist Ihre gewünschte Datenbank, die Sie wiederherstellen möchten?

Eine andere Option, die meiner Meinung nach viel sicherer ist, besteht darin, die Datenbank aus einem --all-databasesSpeicherauszug zu extrahieren . Beispiel:

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

Ersetzen Sie dbnamedurch den gewünschten Datenbanknamen. alldatabases.sqlist der Name Ihrer SQL-Dump-Datei. Auf diese Weise haben Sie die separate Datenbank in der Datei und können sie dann mit einem einfachen Befehl mysql wiederherstellen.

(Credits gehen an: Darren Mothersele - siehe seine Seite )

Hetzbh
quelle
4
Tolle Lösung! Dies sagte, ich musste den ursprünglichen Dump-Header hinzufügen, um einige Fehler zu vermeiden ...
Neuro
1
Dies sollte die akkreditierte Antwort sein
Bysander
Beachten Sie, dass dies nicht in Powershell funktioniert, sondern in cmd
Somnium
Das sed Ding ist wirklich hilfreich!
Shougo Makishima
2
Wie kommt es, dass Sie eine andere Option sagen, die meiner Meinung nach viel sicherer ist ? Gibt es irgendwelche Risiken bei der Verwendung --one-database?
Abdull