Ich versuche, dies als Teil eines Startup-Skript zu tun (das als root läuft) auf einer EC2-Instanzmysqladmin einstellt Passwort initial root in Skript fehlschlägt, funktioniert aber in der Schale
# mysqladmin -u root password mygreatnewpassword
Um dies zu debuggen, wiederholte ich der gesamte Befehl an das Protokoll und es ist korrekt. Ich habe eine 'ps ax' vor dem Befehl im Skript ausgeführt, um sicherzustellen, dass mysql ausgeführt wurde. Ich habe es mit doppelten und einfachen Anführungszeichen um das Passwort versucht (sollte nicht wichtig gewesen sein und nicht). Egal, was ich versuche, im Skript wird es Fehler
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
aber wenn ich kopiere und die exakt gleiche Zeile aus dem Skript in einer Shell funktioniert es läuft. Und ich habe überprüft, dass es kein root-Passwort gibt, bevor der Befehl ausgeführt wird (in jedem Fall).
Es kann nicht sein, dass ich -p verwenden muss, obwohl das der Fehler scheint, denn ich brauche das nicht, wenn ich es von einer Shell aus starte.
Ich bin verwirrt.
Und bevor jemand bemerkt, dass dies unsicher ist, ist es nicht. Das Kennwort wird auf einem privaten EBS-Volume gespeichert, das als Teil des Startvorgangs bereitgestellt und aus einer Datei auf diesem Datenträger abgerufen und in die Umgebung der Startshell-Shell eingefügt und dann im Skript verwendet (und nicht in syslog zurückgegeben) wird. Dann wird das EBS-Volume abgehängt. Sobald das Start-Skript beendet ist, ist dieses Passwort nirgends außer in mysql.
Update: ich dies nur statt versucht (in 5.1 MYSQL Handbuch in 2.12.2
gefundenmysql -u root <<EOF UPDATE mysql.user SET Password = PASSWORD("$MYSQL_PWD") WHERE User = 'root'; FLUSH PRIVILEGES; EOF
nicht funktioniert entweder, ähnlich Fehler und läuft
mysql -u root
aus einer Shell bringt mich gut verbunden (und ich kann die UPDATE und FLUSH cmds eingeben) ohne Fehler.
Ich fange an zu denken, dass mysql und mysqladmin etwas Ungewöhnliches tun, wie das Lesen von einem tty, was dazu führt, dass sie ausfallen, wenn sie in Shell-Skripten ausgeführt werden. Das wird es schwierig machen, dass mein Startskript Dinge initialisiert.
Sorry, wenn ich nicht klar war, gibt es kein root-Passwort, das ist gleich nachdem das Skript mysql installiert. Ich versuche, das ursprüngliche root-Passwort mit mysqladmin zu setzen. Das Format des obigen Befehls ist korrekt, um das root-Passwort zu setzen, wenn keines existiert, und dieser Befehl funktioniert, wenn er in eine Shell eingegeben wird, aber nicht, wenn er vom Startskript aus ausgeführt wird. –