31 votes

Impossible de démarrer/arrêter le service mysql

Prise en charge d'un serveur web Debian Etch avec MySQL en fonctionnement.

Je démarre, arrête et redémarre habituellement msyql en utilisant :

/etc/init.d/mysql restart

Pour une raison quelconque, avec cette configuration, j'obtiens le résultat suivant :

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

Arrêt du serveur de base de données MySQL : mysqld a échoué !

Le processus mysql fonctionne bien :

:~# 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

Je suis sûr qu'il existe des moyens très simples de le faire, mais je veux aussi comprendre ce qui se passe. Pourquoi la méthode classique ne fonctionne-t-elle pas pour moi ?

EDIT UPDATE comme une mise à jour :

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

L'arrêt de mysqladmin fonctionne mais je suis toujours curieux de savoir pourquoi les commandes /etc/init.d/mysql ne fonctionnent pas.

0 votes

Pour moi, le problème était que l'installation faite à la main recherchait /tmp/mysql.sock au lieu de /var/run/mysqld/mysqld.sock . Ainsi, le script des mainteneurs Debian émettait une erreur, silencieusement. Il suffit de corriger socket= dans le /etc/mysql/debian.cnf

26voto

freiheit Points 14144
mysqladmin shutdown

devrait fonctionner pour arrêter le serveur.

Je vois deux possibilités :

  1. MySQL a un problème et refuse de s'arrêter pour une raison quelconque.
  2. L'administrateur précédent a fait quelque chose d'étrange. Soit il a modifié le du fichier init.d, soit il n'a pas pris la peine d'utiliser les paquets Debian pour installer MySQL.

Qu'est-ce que dpkg --list mysql\* dire ?

Que dit /var/log/mysql.err ? Ou les autres journaux mysql ?

EDIT :

Así que mysqladmin shutdown a travaillé ?

D'après cela, le paquet mysql-server est installé (mysql-server-5.0 ; le paquet mysql-server est probablement juste un stub). Il se peut donc qu'il ait été installé par-dessus ? Exécution de debsums mysql-server-5.0 pourrait vous en dire plus. dpkg --listfiles mysql-server-5.0 pourrait aider, aussi...

Qu'y a-t-il dans /etc/init.d/mysql ? Je n'ai pas vérifié cette version spécifique du paquet, mais il devrait essayer d'utiliser mysqladmin shutdown ... Peut-être que tu as de la chance et qu'ils n'ont cassé que ça...

0 votes

Cheers, j'ai ajouté quelques informations supplémentaires à l'article.

0 votes

Je soupçonne qu'ils n'ont pas utilisé les paquets Debian pour installer mysql

0 votes

Quelqu'un a utilisé un paquet Debian une fois, au moins. Il a pu compiler à partir des sources et écraser les fichiers, ou le casser d'une autre manière...

22voto

fatal_error Points 1042

Pourquoi cela se produit-il ?

C'est un problème courant si vous effectuez une importation mysql et écrasez la base de données mysql elle-même, comme lorsque vous restaurez depuis une sauvegarde mysqldump -A.

C'est une bonne chose : vous voulez probablement sauvegarder tous les utilisateurs de mysql, les permissions, etc -- mais cela peut faire des ravages avec des choses comme l'utilisateur debian-sys-maint utilisé pour arrêter proprement mysql.

Bien que cette nouvelle base de données puisse changer le mot de passe root et le mot de passe debian-sys-maint, elle ne changera évidemment pas automatiquement le mot de passe debian-sys-maint attendu dans /etc/mysql/debian.cnf. En fait, à moins que vous n'ayez également sauvegardé ce fichier, vous ne savez probablement même plus quel est ce mot de passe !

Réinitialisation du mot de passe root mysql (facultatif)

Tout d'abord. Si le mot de passe de la racine mysql était différent entre l'ancien et le nouveau serveur, vous pouvez utiliser mysqladmin pour le corriger :

mysql -p -u root password 'newpassword'

Cependant, lorsque vous avez installé mysql-server, apt-get vous a probablement demandé le nouveau mot de passe de la racine de mysql et vous avez probablement utilisé le même que celui que vous utilisiez auparavant.

Corrigez le mot de passe de debian sys maint.

Cherchez maintenant le mot de passe debian sys maint que debian a créé pour vous lorsque vous l'avez installé sur le nouveau serveur. (Vous avez besoin de sudo car ce fichier doit être hautement protégé).

sudo cat /etc/mysql/debian.cnf

Maintenant, connectez-vous à mysql en utilisant le mot de passe root que vous avez défini ci-dessus :

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

Réinitialisez le mot de passe de l'utilisateur debian-sys-maint et n'oubliez pas de vider les privilèges :

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

Testez-le pour être sûr qu'il fonctionne :

sudo /etc/init.d/mysql restart

Conseil rapide

Si vous avez besoin de réinitialiser le mot de passe root du serveur sans avoir à l'arrêter, ce compte utilisateur a l'autorité pour le faire. compte utilisateur a l'autorité pour le faire - il suffit de cat le fichier debian.cnf et de se connecter avec cet utilisateur. N.B. Protégez ce compte utilisateur tout comme root.

2 votes

Merci, Jamieson, cela m'a potentiellement épargné des heures de travail.

1 votes

Génial, et bienvenue ! J'ai dû me rabattre sur ce dossier plus souvent que je ne voudrais l'admettre ;)

1 votes

Réponse brillante. L'importation d'un dump de base de données (et avec lui, le mot de passe root) était exactement la raison dans mon cas. La seule différence est que mon fichier debian.cnf utilisait l'utilisateur mysql "root" au lieu de "debian-sys-maint". J'ai simplement mis le mot de passe root dans debian.cnf et maintenant je peux contrôler mysql via "service mysql <command>".

9voto

AlexeyMK Points 1598
pkill mysql

fonctionnera certainement

1 votes

C'est ce qui a résolu ma question "stopping mysql database server mysqld failed". Vous devriez obtenir un million de points !

6voto

Thomas Kammeyer Points 2743

2 indices de plus :

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

Cela vous montrera les commandes exécutées par l'init script.

installez le paquet debsums, et vous pouvez tester quels paquets ont été modifiés (verify est également disponible pour RPM, mais IMHO fonctionne mieux).

1 votes

J'ai eu le même problème que OP et l'exécution de cette commande a suggéré "Access denied for user 'debian-sys-maint'@'localhost'" ce qui était tout à fait exact : ma base de données mysql n'avait pas encore attribué cualquier les permissions, donc mysql stop n'avait pas les permissions dans la base de données elle-même pour s'arrêter. Un manuel mysqladmin shutdown a fonctionné parfaitement.

2voto

John Kurlak Points 101

Tu pourrais techniquement le terminer par :

pkill -9 mysqld

Mais vous risquez de perdre des données ?

Vous feriez mieux de demander à quelqu'un sur http://www.serverfault.com.

0 votes

Je sais que je peux le faire de cette façon, mais ce n'est pas ce que je cherche à faire régulièrement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X