MySQL start schlägt fehl - mysqld läuft aber trotzdem

Software besorgen und anwenden
Post Reply
Message
Author
User avatar
Libby
Posts: 16
Joined: 25. Oct 2004 15:03

MySQL start schlägt fehl - mysqld läuft aber trotzdem

#1 Post by Libby »

Hallo allerseits!

Ich habe vor kurzem MySQL installiert (SuSE 9.0). Hat einwandfrei funktioniert - bis ich ein Paßwort für den root-User vergeben habe. Wenn ich jetzt MySQL starte, passiert folgendes:

Code: Select all

linux:/etc/init.d # ./mysql start
Starting service MySQL
                                                                                         failed
Der Server scheint aber trotzdem zu laufen:

Code: Select all

linux:/etc/init.d # ./mysql status
Checking for service MySQL:                                                              running
... denn ich kann ganz normal auf die Datenbank zugreifen:

Code: Select all

linux:/etc/init.d # mysql --password
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.0.15

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.00 sec)

mysql>
Da müßte doch eigentlich ein Fehler in /etc/init.d/mysql sein, oder? Weil der Server wird ja einwandfrei gestartet, aber das Startskript denkt, der Start sei fehlgesachlagen ... kann das evtl. mit einer ping-Routine oder sowas zusammenhängen, für die der User evtl. sein Paßwort eingeben müßte?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#2 Post by klopskuchen »

Es wäre möglich das der Server bereits beim Durchlaufen der Startskripte gestartet
wurde und das Skript nun anstatt einer "vernünftigen" Meldung nur ein failed ausgibt.
Wenn du das Skript nicht extra vor dem Startversuch ausführbar gemacht hast, wird es
wohl so sein. Mach mal nach dem Booten ein
nmap localhost
oder eben
./mysql status
dann siehst du ob er schon läuft oder nicht.

MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

#3 Post by hjb »

Hi!

Unter Fedora habe ich genau das gleiche gesehen. Im Init-Skript ist irgendein idiotischer Timeout, und wenn mysqld lange zum Starten braucht, dann denkt das Skript, es ist fehlgeschlagen. Abhilfe kann man schaffen, indem man ein eigenes ganz simples Init-Skript macht oder das bestehende ändert. Warum mysqld so lange zum Start braucht, habe ich nicht analysiert.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

User avatar
Libby
Posts: 16
Joined: 25. Oct 2004 15:03

#4 Post by Libby »

@klopskuchen: Der Server wird nach dem Booten nicht austomatisch gestartet. Das hab ich auch gedacht, und als erstes ausprobiert ...

@hjb: Was muß ich denn da ändern? Ich bin zwar wirklich kein Linux-Noob (mehr ;-), aber in init-Skripts hab ich bisher nicht rumgecoded ... Aber das mit der langen Zeit zum Starten stimmt tatsächlich. Ich habe aber bisher noch keine MySQL-Server gesehen, der nicht lange zum Starten gebraucht hätte!

Ist das evtl. folgender Code aus /etc/init.d/mysql:

Code: Select all

for i in 1 2 3 4 5 6; do
  sleep 1
  $MYADMIN -u %mysql_daemon_user ping &>/dev/null && i='' && break
done
?

Weil wenn ich den befehl manuell eingebe, wenn der Server läuft, passiert folgendes:

Code: Select all

linux:/etc/init.d # mysqladmin -u root ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user: 'root@localhost' (Using password: NO)'
Folgendes geht aber:

Code: Select all

linux:/etc/init.d # mysqladmin -u root --password ping
Enter password:
mysqld is alive
Kann man das nicht einstellen, daß root ein Paßwort hat (vernünftigerweise!!!), aber ohne Paßwort pingen darf? Damit wäre das Problem ja schon gelöst ... man könnte natürlich das root-Paßwort in der Init-Datei in dem Befehl mittels --password="xyz" angeben, aber das würd ich ungern machen ...

User avatar
Libby
Posts: 16
Joined: 25. Oct 2004 15:03

#5 Post by Libby »

Ich hab's jetzt doch mal ausprobiert und in /etc/init.d/mysql was verändert.

in /etc/my.cnf hab ich mal das root-Paßwort reingeschrieben:

Code: Select all

# The following options will be passed to all MySQL clients
[client]
password  = xyz
port      = 3306
socket    = /var/lib/mysql/mysql.sock
Das müßte doch eigentlich klargehen, weil nur der user mysql Zugriff auf die Datei hat:

Code: Select all

-rw-------    1 mysql    daemon       4896 2004-11-14 14:50 my.cnf
In /etc/init.d/mysql hab ich die Schleife so geändert:

Code: Select all

for i in 1 2 3 4 5 6; do
  sleep 1
  $MYADMIN ping &>/dev/null && i='' && break
done
Jetzt funktioniert alles einwandfrei ... kann man das so lassen?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#6 Post by klopskuchen »

>Jetzt funktioniert alles einwandfrei ... kann man das so lassen?
Wenn es funktioniert... ;)
Einziges Manko wäre ein evtl. Auslesen des Passwortes aus /etc/mysql.conf
durch lokale Benutzer, je nach Dateirechten.

MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
Libby
Posts: 16
Joined: 25. Oct 2004 15:03

#7 Post by Libby »

Wie gesagt, nur der user mysql hat Lese- und Schreibrechte auf diese Datei. Als normaler User kann ich ja nicht drauf zugreifen!

Post Reply