Frage Der mysql-Dienst kann nicht gestartet / gestoppt werden


Übernahme eines Debian Etch-Webservers mit laufendem MySQL.

Normalerweise starte, stopp und starte msyql neu mit:

/etc/init.d/mysql Neustart

Aus irgendeinem Grund auf diesem Setup bekomme ich Folgendes:

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

Stoppen des MySQL-Datenbankservers: mysqld ist fehlgeschlagen!

Der mysql-Prozess läuft gut:

:~# 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 einen wirklich einfachen Weg gibt, aber ich möchte auch verstehen, was hier vor sich geht. Warum funktioniert der typische Weg nicht für mich?

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

mysqladmin shutdown funktioniert, aber ich bin immer noch neugierig, warum die /etc/init.d/mysql Befehle nicht funktionieren.


28
2018-06-27 16:31


Ursprung


Für mich war das Problem, dass handgemachte Installation gesucht wurde /tmp/mysql.sock anstatt /var/run/mysqld/mysqld.sock. Das Skript von Debian-Betreuern gab also einen Fehler aus. Du musst nur reparieren socket= in dem /etc/mysql/debian.cnf - Yvan


Antworten:


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 herunterzufahren.
  2. Der vorherige Administrator hat etwas seltsam gemacht. Entweder hat man das init.d-Skript modifiziert oder gar nicht erst die Debian-Pakete benutzt, um MySQL zu installieren.

Was macht dpkg --list mysql\* sagen?

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

BEARBEITEN:

So mysqladmin shutdown hat funktioniert?

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

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


24
2018-06-27 16:58



Prost, fügte dem Beitrag weitere Informationen hinzu. - Derek Organ
Ich vermute, dass sie die Debian-Pakete nicht zur Installation von MySQL benutzt haben - Derek Organ
Jemand hat wenigstens einmal ein Debian-Paket benutzt. Sie haben vielleicht aus der Quelle kompiliert und die tatsächlichen Dateien überschrieben, oder es auf andere Weise kaputt gemacht ... - freiheit


Warum passiert das?

Dies ist ein häufiges Problem, wenn Sie einen mysql-Import durchführen und die mysql-Datenbank selbst überschreiben, etwa wenn Sie von einer mysqldump -A-Sicherung wiederherstellen.

Das ist eine gute Sache: Sie möchten wahrscheinlich alle Ihre mysql-Benutzer, Berechtigungen usw. sichern - aber es kann Chaos mit Dingen wie dem debian-sys-maint-Benutzer verursachen, der verwendet wird, um mysql sauber herunterzufahren.

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 sich das mysql-root-Passwort zwischen alten und neuen Servern unterscheidet, können Sie es mit mysqladmin beheben:

mysql -p -u root password 'newpassword'

Wenn Sie jedoch apt-get mysql-server installieren, haben Sie wahrscheinlich das neue mysql-root-Passwort eingegeben, und Sie haben vermutlich dasselbe verwendet, mit dem Sie zuvor gearbeitet haben.

Korrigiere das debian sys maint Passwort.

Suchen Sie nun nach dem debian sys maint-Passwort, das debian für Sie erstellt hat, als Sie es auf dem neuen Server installiert haben. (Sie benötigen sudo, da dies eine sehr 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, 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 das Root-Passwort für den Server einmal zurücksetzen müssen, ohne den Server herunterfahren zu müssen, hat dieses Benutzerkonto   die Autorität, es zu tun - einfach die debian.cnf Datei cat und loggen Sie sich mit diesem Benutzer ein.   N.B. Schützen Sie dieses Benutzerkonto genau wie root.


21
2017-08-22 22:07



Danke, Jamieson, das hat mir möglicherweise Stunden Arbeit erspart. - slhck
Super und total willkommen! Ich musste öfter auf diese Akte zurückgreifen, als ich zugeben möchte;) - Jamieson Becker


2 weitere Hinweise:

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

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

Installieren Sie das Paket Debsums, und Sie können testen, welche Pakete geändert wurden (Überprüfen ist auch für RPM verfügbar, aber IMHO funktioniert besser).


6
2018-06-27 17:45



Ich hatte das gleiche Problem wie OP und die Ausführung dieses Befehls vorgeschlagen "Access denied for user 'debian-sys-maint'@'localhost'", das war absolut richtig: meine mysql-datenbank war noch nicht zugeordnet irgendein Berechtigungen, also mysql stop hatte nicht die Berechtigungen in der Datenbank selbst zum Herunterfahren. Ein Handbuch mysqladmin shutdown hat perfekt funktioniert. - jevon


pkill mysql

wird definitiv funktionieren


5
2018-06-27 23:10



Dies ist, was meine Frage gelöst "stop mysql Datenbankserver mysqld gescheitert". Du solltest eine Million Punkte bekommen! - Hans Wassink


Angenommen, das Paket ist etwas seltsam, könnte das Problem die PID-Datei sein. Ich vermute, dass die neuen Pakete oder die kompilierte Installation nicht / var / run / mysql / oder was auch immer auf Debian standardmäßig für die PID-Datei erstellt wurde oder das Init-Skript an anderer Stelle nach der Datei mysqld.pid sucht. Wenn Sie die Init / PID-Datei nicht übereinstimmen können Dinge funktionieren sollten.


2
2018-06-27 17:49



Das Init-Skript verwendet die PID-Datei nicht zum Stoppen des Servers. - theotherreceive


Das Skript mysql shutdown verwendet den Benutzer debian-sys-maint, um 'mysqladmin shutdown' auszuführen, indem das Kennwort für den Benutzer aus /etc/mysql/debian.cnf gelesen wird. Sie sollten prüfen, ob diese Datei existiert und dass Sie mysqladmin shutdown als diesen Benutzer ausführen können.


2
2018-06-27 22:06





Sie könnten es technisch beenden mit:

pkill -9 mysqld

Aber Sie könnten Daten verlieren?

Sie könnten besser jemanden auf http://www.serverfault.com fragen


1
2018-06-28 10:08



Ich bin mir bewusst, dass ich es so mache, aber nicht das, was ich regelmäßig machen möchte. - Derek Organ


Wenn Sie "pkill mysql" verwenden, verlieren Sie wahrscheinlich auch Ihre Daten, besonders wenn sie als "pkill -9" aufgerufen werden :(

Ich würde auch 'sh -x' empfehlen, um zu sehen, was das Problem mit dem init-Skript sein könnte, und Sie können auch in die Fehlerprotokolle von MySQL (/ var / log / mysql) schauen oder / var / lib / mysql, abhängig von der Konfiguration, um zu sehen, ob es auf einem hängt Ja wirklich lange laufende Abfrage oder so etwas und damit nicht ganz bereitwillig noch ganz aufzuhören.


1
2018-01-12 18:44





Um den Kommentar zu Ihrer Frage zu verfolgen, schreibe ich eine vollständige Antwort auf:

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

Die Lösung besteht darin, den Socket-Pfad zu beheben im /etc/mysql/debian.cnfdurch die Bereitstellung des Guten socket=. Oder indem du es behälst, aber dann änderst du das ein /etc/mysql/my.cnf.

Hier ist, wie ich das herausgefunden habe: in /etc/init.d/mysql Wenn die Nachricht «failed» angezeigt wird, lautet die Zeile:

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

Dies wies mich darauf hin $MYADMIN ping, welches ist mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. Die Ausführung dieses Befehls endet am:

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

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

Überprüfen Sie, ob mysqld ausgeführt wird und der Socket: '/var/run/mysqld/mysqld.sock' existiert!

Also habe ich es mir angeschaut /etc/mysql/debian.cnf und fand heraus, dass das die schlechte Steckdose war.


1