Der mysql-Dienst kann nicht gestartet / gestoppt werden

28

Übernahme eines Debian Etch-Webservers unter MySQL.

Normalerweise starte, stoppe und starte ich msyql neu mit:

/etc/init.d/mysql restart

Aus irgendeinem Grund erhalte ich bei diesem Setup Folgendes:

: ~ # /etc/init.d/mysql stop

Stoppen des MySQL-Datenbankservers: mysqld ist fehlgeschlagen!

Der MySQL-Prozess läuft einwandfrei:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

Ich bin mir sicher, dass es einige wirklich einfache Möglichkeiten gibt, aber ich möchte auch verstehen, was los ist. Warum funktioniert der typische Weg bei mir nicht?

UPDATE BEARBEITEN als Update:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

Das Herunterfahren von mysqladmin funktioniert, aber ich bin immer noch gespannt, warum die Befehle /etc/init.d/mysql nicht funktionieren.

Derek Organ
quelle
Für mich war das Problem , dass handgemachte Installation gesucht /tmp/mysql.sockstatt /var/run/mysqld/mysqld.sock. Daher gab das Skript der Debian-Betreuer stillschweigend einen Fehler aus. Sie müssen nur socket=in der/etc/mysql/debian.cnf
Yvan

Antworten:

25
mysqladmin shutdown

sollte funktionieren, um den Server herunterzufahren.

Ich sehe zwei wahrscheinliche Möglichkeiten:

  1. MySQL hat ein Problem und weigert sich aus irgendeinem Grund, das Programm herunterzufahren.
  2. Der vorherige Administrator hat etwas Seltsames getan. Entweder wurde das init.d-Skript geändert oder es wurde überhaupt nicht mit den Debian-Paketen gearbeitet, um MySQL zu installieren.

Was dpkg --list mysql\*heißt das?

Was sagt /var/log/mysql.err? Oder die anderen MySQL-Protokolle?

BEARBEITEN:

So hat es mysqladmin shutdownfunktioniert?

Demnach ist das mysql-server-Paket installiert (mysql-server-5.0; das mysql-server-Paket ist wahrscheinlich nur ein Stub). Also haben sie vielleicht drüber installiert? Laufen debsums mysql-server-5.0könnte Ihnen mehr sagen. dpkg --listfiles mysql-server-5.0könnte auch helfen ...

Was ist eigentlich in /etc/init.d/mysql? Ich habe diese spezielle Version des Pakets nicht überprüft, aber sie sollte versuchen zu verwenden mysqladmin shutdown... Vielleicht hast du Glück und sie haben das nur kaputt gemacht ...

freiheit
quelle
Prost, fügte einige weitere Informationen zu der Post.
Derek Organ
Ich vermute, sie haben die Debian-Pakete nicht verwendet, um mysql
Derek Organ am
Zumindest einmal hat jemand ein Debian-Paket verwendet. Möglicherweise haben sie aus dem Quellcode kompiliert und die eigentlichen Dateien überschrieben oder auf andere Weise
beschädigt
22

Warum passiert das?

Dies ist ein häufiges Problem, wenn Sie einen MySQL-Import durchführen und die MySQL-Datenbank selbst überschreiben, z. B. wenn Sie eine Wiederherstellung aus einer MySQL-Sicherung durchführen.

Dies ist eine gute Sache: Sie möchten wahrscheinlich alle Ihre MySQL-Benutzer, Berechtigungen usw. sichern - aber es kann Chaos mit Dingen wie dem Benutzer debian-sys-maint anrichten, der zum sauberen Herunterfahren von MySQL verwendet wird.

Obwohl diese neue Datenbank möglicherweise sowohl das root-Passwort als auch das debian-sys-maint-Passwort ändert, wird das erwartete debian-sys-maint-Passwort in /etc/mysql/debian.cnf natürlich nicht automatisch geändert. In der Tat, wenn Sie nicht auch diese Datei gesichert haben, wissen Sie wahrscheinlich nicht einmal mehr, was dieses Passwort ist!

Zurücksetzen des MySQL-Root-Passworts (optional)

Das wichtigste zuerst. Wenn das mysql-root-Passwort zwischen alten und neuen Servern unterschiedlich war, können Sie es mit mysqladmin reparieren:

mysql -p -u root password 'newpassword'

Wenn Sie jedoch mysql-server apt-get installiert haben, wurden Sie wahrscheinlich zur Eingabe des neuen mysql-root-Passworts aufgefordert, und Sie haben wahrscheinlich das gleiche Passwort verwendet, das Sie zuvor verwendet haben.

Korrigieren Sie das debian sys maint Passwort.

Suchen Sie nun das debian sys maint-Passwort, das Sie bei der Installation auf dem neuen Server von debian erstellt haben. (Sie benötigen sudo, da dies eine stark geschützte Datei sein sollte.)

sudo cat /etc/mysql/debian.cnf

Melden Sie sich jetzt mit dem oben festgelegten root-Passwort bei mysql an:

mysql -p -u root   # use your new password when prompted

Setzen Sie das Passwort für den Benutzer debian-sys-maint zurück und vergessen Sie nicht, die Berechtigungen zu löschen:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

Testen Sie, ob es funktioniert:

sudo /etc/init.d/mysql restart

Kurzer Tipp

Wenn Sie jemals das Root-Passwort für den Server zurücksetzen müssen, ohne den Server herunterfahren zu müssen, hat dieses Benutzerkonto die Berechtigung, dies zu tun - rufen Sie einfach die Datei debian.cnf auf und melden Sie sich mit diesem Benutzer an. NB Schützen Sie dieses Benutzerkonto wie root.

Jamieson Becker
quelle
2
Vielen Dank, Jamieson, das hat mir möglicherweise Stunden Arbeit erspart.
Slhck
1
Genial und herzlich willkommen! Ich musste öfter auf diese Datei zurückgreifen, als ich zugeben möchte;)
Jamieson Becker
1
Geniale Antwort. Der Import eines Datenbank-Dumps (und damit des Root-Passworts) war in meinem Fall genau der Grund. Der einzige Unterschied ist, dass meine debian.cnf-Datei den mysql-Benutzer "root" anstelle von "debian-sys-maint" verwendete. Ich habe einfach das root-Passwort in debian.cnf eingegeben und jetzt kann ich mysql über "service mysql <command>" steuern.
Tomasz P. Szynalski
6

2 weitere Hinweise:

sh -x /etc/init.d/mysql restart

Dies zeigt Ihnen die Befehle, die vom Init-Skript ausgeführt werden.

Wenn Sie die Paket-Debsums installieren, können Sie testen, welche Pakete geändert wurden (Verify ist auch für RPM verfügbar, IMHO funktioniert jedoch besser).

elcuco
quelle
1
Ich hatte das gleiche Problem wie OP und schlug vor "Access denied for user 'debian-sys-maint'@'localhost'", diesen Befehl auszuführen , was absolut richtig war: Meine MySQL-Datenbank hatte noch keine Berechtigungen zugewiesen , hatte also mysql stopnicht die Berechtigungen in der Datenbank selbst, um herunterzufahren. Ein Handbuch mysqladmin shutdownhat einwandfrei funktioniert.
Jevon
5
pkill mysql

wird auf jeden Fall funktionieren

Jonathan
quelle
Dies ist, was meine Frage "Stoppen von MySQL-Datenbankserver MySQL fehlgeschlagen" gelöst. Sie sollten eine Million Punkte bekommen!
Hans Wassink
2

Vorausgesetzt, das Paket ist etwas seltsam, könnte das Problem die PID-Datei sein. Ich vermute, dass die neuen Pakete oder die kompilierte Installation / var / run / mysql / oder was auch immer unter Debian Standard ist, für die PID-Datei, in die geschrieben werden soll, nicht erstellt haben oder das Init-Skript an einer anderen Stelle nach der mysqld.pid-Datei sucht. Wenn Sie das Problem mit der Init / PID-Datei beheben können, sollten die Dinge wahrscheinlich funktionieren.

kashani
quelle
Das Init-Skript verwendet die PID-Datei nicht, um den Server zu stoppen.
theotherreceive
2

Das mysql shutdown-Skript verwendet den Benutzer debian-sys-maint, um mysqladmin shutdown auszuführen, indem es das Kennwort für den Benutzer aus /etc/mysql/debian.cnf liest. Sie sollten überprüfen, ob diese Datei vorhanden ist und dass Sie mysqladmin shutdown als dieser Benutzer ausführen können.

theotherreceive
quelle
1

Sie könnten es technisch beenden mit:

pkill -9 mysqld

Aber Sie könnten Daten verlieren?

Fragen Sie besser jemanden unter http://www.serverfault.com

John Kurlak
quelle
Mir ist bewusst, dass ich das so mache, aber auf keinen Fall, was ich regelmäßig machen möchte.
Derek Organ
1

Bei Verwendung von "pkill mysql" gehen wahrscheinlich auch Daten verloren, insbesondere wenn es als "pkill -9" aufgerufen wird :(

Ich würde auch empfehlen, 'sh -x' zu verwenden, um zu sehen, was das Problem mit dem Init-Skript sein könnte, und Sie können auch einen Blick in die Fehlerprotokolle für MySQL werfen (/ var / log / mysql oder / var / lib / mysql, je nach konfiguration) um zu sehen, ob es auf einer wirklich lang laufenden abfrage hängt oder so und somit noch nicht bereit ist, anmutig ganz zu kündigen.

nixgeek
quelle
1

Um dem Kommentar zu Ihrer Frage nachzugehen, schreibe ich eine vollständige Antwort auf:

Das Problem ist, dass der Standard-Socket /tmp/mysql.sockmit der MySQL-Quelle und /var/run/mysqld/mysqld.sockmit Debian-Binärdateien arbeitet.

Die Lösung ist der Socket - Pfad zu beheben in /etc/mysql/debian.cnf, durch die gute Bereitstellung socket=. Oder indem Sie es behalten, aber dann das ändern /etc/mysql/my.cnf.

So habe ich das herausgefunden: /etc/init.d/mysqlWenn dort die Meldung "Fehlgeschlagen" angezeigt wird, haben Sie die folgende Zeile:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

Das hat mich darauf hingewiesen $MYADMIN ping, was ist mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. Die Ausführung dieses Befehls endet am:

/ usr / bin / mysqladmin: Verbindung zum Server bei 'localhost' fehlgeschlagen

Fehler: 'Verbindung zum lokalen MySQL-Server über Socket nicht möglich' /var/run/mysqld/mysqld.sock '(2)'

Überprüfen Sie, ob mysqld läuft und der Socket '/var/run/mysqld/mysqld.sock' existiert!

Also habe ich mir das angeschaut /etc/mysql/debian.cnfund herausgefunden, dass es sich um eine schlechte Steckdose handelt.

Yvan
quelle
0

benutze den folgenden Befehl:

$ mysqladmin shutdown

Dies sollte in Ihrem Fall im Verzeichnis / usr / bin verfügbar sein.

Masood Syed
quelle
0

Sie müssen ein Superuser sein, um mysql (und die meisten anderen Dienste) auf debian zu stoppen.

Ich bin mir nicht sicher, ob Sie es bereits sind oder nicht

  • Melden Sie sich als root an
  • setze sudo vor deinen /etc/init.d/mysql restart Befehl (er fragt dich nach deinem Passwort und du musst in der sudoers Gruppe sein)
benlumley
quelle