2012-04-07 12 views
1

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

mysql -u root <<EOF 
UPDATE mysql.user SET Password = PASSWORD("$MYSQL_PWD") WHERE User = 'root'; 
FLUSH PRIVILEGES; 
EOF 
gefunden

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.

+0

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. –

Antwort

0

auf Bezug mysql_secure_installation (/ usr/bin auf meinem installieren) setzt sie das Kennwort in der DB und eine temporäre Datei mysql.cnf: die folgenden sind Auszüge aus der Datei, die Sie und Vorstellung davon zu geben, was er tut .

#!/bin/ksh 
config=".my.cnf.$$" 
command=".mysql.$$" 
do_query() { 
    echo $1 >$command 
    mysql --defaults-file=$config <$command 
    return $? 
} 

make_config() { 
    echo "# mysql_secure_installation config file" >$config 
    echo "[mysql]" >>$config 
    echo "user=root" >>$config 
    echo "password=$rootpass" >>$config 
} 

rootpass="mynewpassword" 
do_query "UPDATE mysql.user SET Password=PASSWORD('$rootpass') WHERE User='root';" 
do_query "FLUSH PRIVILEGES;" 
rm -f $config $command 
+0

Ich fragte, wie das root-Passwort nach einer Neuinstallation (wenn kein root-Passwort vorhanden ist) von meinem Installationsskript aus gesetzt wird. Was Sie gepostet haben, macht nur einen Ping-Befehl, der sich mit root/secretpassword authentifiziert. –

+0

Entschuldigung, ich habe das von der ursprünglichen Frage nicht verstanden; Ich habe einen Auszug aus den mysql-Dateien hinzugefügt, der helfen soll, dies zu beheben. –

+0

danke für die Hilfe, hat immer noch nicht funktioniert. Ich habe es sogar vereinfacht. Es wird von der Befehlszeile ausgeführt, schlägt aber immer noch in einem Skript fehl. Ich gebe auf und nehme an, ich kann es nicht tun (http://cl.ly/2j352L2P041M0f3H470W) –

0

Es sieht nicht so aus, als ob das möglich ist. mysql und mysqladmin sind nicht vollständig skriptfähig.

0

Ok. Ich habe gerade mysql auf meinem Mac eingerichtet und folge den Anweisungen, wie ich das mysql-root-Passwort zum ersten Mal mit dem Befehl mysqladmin gesetzt habe, wie es der Besitzer dieser Frage getan hat. Grundsätzlich ist die Situation genau so wie hier beschrieben.

Also tatsächlich akzeptiert mysql sowohl das neue Passwort nach dem Ausführen des Befehls und kein Passwort beim Versuch, sich als root anzumelden. Dies geschieht, weil mehrere Benutzer namens root vorhanden sind.

+------+-------------------+ 
| User | Host    | 
+------+-------------------+ 
| root | 127.0.0.1   | 
| root | ::1    | 
|  | localhost   | 
| root | localhost   | 
|  | macbook-pro.local | 
| root | macbook-pro.local | 
+------+-------------------+ 

Daher fühle ich das Bedürfnis diese Frage zu nekro ..