Ich versuche, einen Cron-Job für die Sicherung von meinem Slave-Computer festzulegen. Also muss ich den Sklaven aufhalten
Ich habe einen Befehl erteilt
mysqladmin --user=root --password=test_pass stop-slave
Aber es wirft Fehler:
mysqladmin: Verbindung zum Server bei 'localhost' fehlgeschlagen Fehler: 'Zugriff für Benutzer' root '@' localhost 'verweigert (mit Passwort: YES)'
Jetzt habe ich es mit dem Befehl versucht
mysqladmin --user=root --password stop-slave
Es fordert zur Eingabe des Passworts auf und ich gab als test_pass
und alles war in Ordnung.
Warum ist das so passiert? Was ist die Alternative?
NB: Übrigens ist meine MySQL-Version mysql-5.0.95-5
, es macht keinen Sinn.
mysql
authentication
mysqladmin
Praveen Prasannan
quelle
quelle
'
einfache Anführungszeichen sollte dieses Problem verhindern. gnu.org/software/bash/manual/bashref.html#QuotingAntworten:
Befehlszeilenargumente können von der Befehlsshell des Systems interpretiert werden. Dabei wird das Verhalten des Befehls oder der Wert der Argumente geändert, bevor sie an das aufgerufene Programm übergeben werden.
Wenn ein Argument (z. B. der Wert für
--password
) ein Zeichen enthält, das die Shell möglicherweise interpretiert, müssen sie entweder in Anführungszeichen (normalerweise in einfachen Anführungszeichen'
in Unix oder in doppelten Anführungszeichen"
in Windows eingeschlossen) oder einzeln (normalerweise mit einem Backslash\
vor jedem Metazeichen) eingeschlossen werden ) um eine Interpretation durch die Shell zu vermeiden.Während die spezifischen Zeichen systemspezifisch sind, sollten Sie folgende Zeichen beachten:
Wenn das Passwort für ein wirklich schlechtes Beispiel auf
pa$$word
... gesetzt wäreWeiterführende Literatur:
Update: Um
'
einfache oder"
doppelte Anführungszeichen im Kennwort zu umgehen, können Sie diese entweder mit einem führenden Backslash maskieren oder das gesamte Argument in den entgegengesetzten Anführungszeichenstil einschließen, wenn keine anderen Zeichen vorhanden sind, mit denen der ausgewählte Anführungszeichenstil nicht kompatibel ist mit.Wenn Sie ein einfaches Anführungszeichen und andere Sonderzeichen haben, bleibt der Backslash hängen, da unter Unix das doppelte Anführungszeichen "schwächer" ist als ein einfaches Anführungszeichen und viele Metazeichen immer noch erweitert werden, wenn sie in doppelte Anführungszeichen, aber nicht in einfache Anführungszeichen eingeschlossen sind Zitate.
Dies ist nicht MySQL-spezifisch, gilt jedoch für alle Elemente mit Befehlszeilenargumenten.
Normalerweise können Sie den
echo
Befehl verwenden, um zu sehen, wie die Shell Ihre Argumente interpretiert.Follow-up: Die Bash-Shell (und vermutlich einige andere) ermöglicht das Entkommen von einfachen Anführungszeichen in Zeichenfolgen in einfachen Anführungszeichen, obwohl die Konvention bizarr ist (wahrscheinlich basierend auf einer längst vergessenen Entscheidung, die jetzt im Nebel der Zeit verloren gegangen ist):
Ersetzen Sie jedes Zeichen
'
innerhalb der Zeichenfolge durch,'\''
bevor Sie die gesamte Zeichenfolge in einfache Anführungszeichen setzen ... damit die Literalzeichenfolgefoo'bar
ausgedrückt wird als'foo'\''bar'
.Wie ich schon sagte, bizarr. Dies ist erforderlich, da ein Backslash einem einfachen Anführungszeichen außerhalb einer Zeichenfolge in einfachen Anführungszeichen, ein Backslash in einer Zeichenfolge in einfachen Anführungszeichen in bash nichts entgeht und Zeichenfolgen in einfachen Anführungszeichen durch mehrere einfache Anführungszeichen geschlossen und wieder geöffnet werden können, solange keine Leerzeichen vorhanden sind dazwischenliegende Zeichen, die eine besondere Bedeutung haben. So
'\''
die Angabe der Zeichenfolge schließt, dann liefert die wörtliche entkam, wieder öffnet dann die Angabe des Strings.quelle
pa$$word
Zusatz:
Auf einem Windows-Computer hatten wir ebenfalls Probleme mit einem Kennwort: Es enthielt,
%
das als%%
maskiert werden muss (Anführungszeichen allein reichen hier nicht aus).quelle