International shortform:
Hi, if you reached this page, because it’s one of five webpages regarding this specific error message, please scroll down to the end.
Und für alle anderen, die lange Form:
Die Shell kann komisch sein, aber die Abwesenheit der Bashshell ist noch zu viel komischeren Sachen fähig, eine davon ist der Bug von Mysqldump keine Datenbank angegeben zu haben.
Hintergrund: Wenn man in Java mit Exec() einen Befehl startet, hat man keine Shell vor sich und damit auch eine Menge Sicherheitsprobleme nicht mehr. Nachteil : u.a. „*“ wird nicht mehr funktionieren, denn das wird von der Bash geparst. Keine Bash => Kein „*“ Keine „<>“ .
Das kennt man noch. Was jetzt kommt, ist allerdings extrem schwer zu debuggen, deswegen bin ich auch ein klein bisschen stolz als einziger im Netz eine Lösung präsentieren zu können, auch wenn die eher trivialer Natur ist. Sucht mal nach der Fehlermeldung, es gibt nur 4 Seiten, die diese Meldung behandeln 😉 (OK, jetzt 5 )
Das hier ist der Befehl:
/usr/bin/mysqldump --add-locks -e --force -R --triggers --add-drop-table --hex-blob -h localhost --password=dbpass --user=dbuser dbname;
Das erzeugt die Fehlermeldung :
mysqldump: Got error: 1046: No database selected when selecting the database
obwohl eine Datenbank angegeben ist. Gibt man den Befehl in die Shell ein, geht es sofort ohne Anpassungen. Kleine Anmerkung, auf die Fehlermeldung an sich muß man geistig erstmal kommen, richtig wäre nämlich „no databasename given“
Wie löst man das jetzt, wenn man doch schon alles richtig angegeben hat ?
Na man drückt dem Befehl die Pistole auf die Brust, so daß er sich nicht mehr herausreden kann ;D
/usr/bin/mysqldump --add-locks -e --force -R --triggers --add-drop-table --hex-blob -h localhost --password=dbpass --user=dbuser --databases dbname
Der kleine Zusatz „–databases“ ist eigentlich dazu da, mehr als eine Datenbank in einen SQL-Dump zu integrieren. Es geht aber auch nur mit einer einzigen Datenbank und komischerweise kommt der Parser jetzt nicht mehr durch einander und erkennt die Datenbank am Ende des Befehls. Es gibt so bescheuerte Bugs 😀
Ok, Hello there. You found this page, because it’s the only one marked as solution to the problem, that you give mysqldump a databasename and it says, that you did not. It’s a bug that occurs only in the absence of bash. You counter it by adding „–databases “ infront of your databasename. See the above example if your uncertain how to do it.
If you wanne see more articles in english, please leave a comment about it. Cu.