Wie lösche ich alle Tabellen in einer MySQL-Datenbank, ohne die Datenbank zu löschen?
12
Ich muss alle Tabellen in einer Datenbank löschen, ohne vorher deren Namen zu kennen. In der Regel wird die Datenbank gelöscht und anschließend neu erstellt, dies ist jedoch keine Option. Wie geht das am besten?
Warum schreiben Sie übrigens '$' vor den IFS-Wert? Warum sieht es nicht aus wie "IFS = '\ n'"?
kolypto
@o_OTync Using $''bewirkt, dass Bash Sequenzen mit umgekehrten Schrägstrichen interpretiert, anstatt sie wörtlich zu nehmen. '\n'würde genau \ n enthalten, einfach so, was $IFSbedeuten würde, \ n und Zeichen aufzuteilen. $'\n'würde ein Newline-Zeichen enthalten, 0x0D. Weitere Informationen finden Sie hier: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .
Jeff Snider
Ich denke, das ist einfacher als mit der INFORMATION_SCHEMA.
Wenn du Zugriff auf das Dateisystem hast, dann einfach rm -rf databasename/*:).
Die Anweisung Drop database macht dasselbe ... Auszug aus dem MySQL-Handbuch:
Die Anweisung DROP DATABASE entfernt aus dem angegebenen Datenbankverzeichnis die Dateien und Verzeichnisse, die MySQL im normalen Betrieb selbst erstellen kann:
Extrem schlechte Idee für jede nicht-triviale Einrichtung, da MySQL nicht erwartet, dass diese Dateien plötzlich verschwinden und mitten in einer beliebigen Anzahl von Operationen, Transaktionen, Replikation, Sperren sein
könnten
Würden Sie in Betracht ziehen, Ihre Antwort dahingehend zu überarbeiten, dass sie die richtigen Befehle und Prozeduren enthält?
Antworten:
Es gibt einen einfacheren Bash- Einzeiler mit mysqldump (aus Thingy Ma Jig Blog ).
Wenn Sie diesen Fehler erhalten:
Versuche Folgendes:
Jetzt werden die Einschränkungen ignoriert.
quelle
Verwenden Sie die Tabellen information_schema , um die Metadaten zur Datenbank abzurufen, und löschen Sie die dort aufgelisteten Tabellen.
quelle
Sie können auch ein schnelles Shell-Skript verwenden:
Entfernen
echo
Sie, nachdem Sie überprüft haben, dass es das tut, was Sie erwarten.quelle
$''
bewirkt, dass Bash Sequenzen mit umgekehrten Schrägstrichen interpretiert, anstatt sie wörtlich zu nehmen.'\n'
würde genau \ n enthalten, einfach so, was$IFS
bedeuten würde, \ n und Zeichen aufzuteilen.$'\n'
würde ein Newline-Zeichen enthalten, 0x0D. Weitere Informationen finden Sie hier: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .Kürzlich gab es einen Eintrag im Xaprb-Blog, der dies sehr gut behandelt.
Dazu gehört, warum das Verwenden
INFORMATION_SCHEMA
nicht immer eine gute Sache ist und verweist auf ein Tool dieser lieben Leute bei Maatkit .Versuchen Sie Folgendes mit
mk-find
:Wenn Sie mit den Ergebnissen zufrieden sind, dann:
quelle
Wenn du Zugriff auf das Dateisystem hast, dann einfach
rm -rf databasename/*
:).Die Anweisung Drop database macht dasselbe ... Auszug aus dem MySQL-Handbuch:
Die Anweisung DROP DATABASE entfernt aus dem angegebenen Datenbankverzeichnis die Dateien und Verzeichnisse, die MySQL im normalen Betrieb selbst erstellen kann:
quelle