web-dev-qa-db-fra.com

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

Reprendre un serveur Web Debian Etch avec MySQL en cours d'exécution.

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

/etc/init.d/mysql restart

Pour une raison quelconque sur cette configuration, j'obtiens ce qui suit:

: ~ # /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 également comprendre ce qui se passe. Pourquoi la manière typique ne fonctionne pas pour moi?

EDIT UPDATE comme 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.

28
Derek Organ
mysqladmin shutdown

devrait fonctionner pour arrêter le serveur.

Je vois deux possibilités probables:

  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 vous avez modifié le script init.d, soit vous n'avez 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?

MODIFIER:

Donc mysqladmin shutdown travaillé?

Selon cela, le paquet mysql-server est installé (mysql-server-5.0; le paquet mysql-server n'est probablement qu'un talon). Alors ils ont peut-être installé dessus? Fonctionnement debsums mysql-server-5.0 pourrait vous en dire plus. dpkg --listfiles mysql-server-5.0 pourrait aussi aider ...

Que contient réellement /etc/init.d/mysql? Je n'ai pas vérifié cette version spécifique du package, mais il devrait essayer d'utiliser mysqladmin shutdown ... Vous avez peut-être de la chance et ils ne l'ont cassé que ...

25
freiheit

Pourquoi cela se produit

Il s'agit d'un problème courant si vous effectuez une importation mysql et écrasez la base de données mysql elle-même, par exemple lorsque vous effectuez une restauration à partir d'une sauvegarde mysqldump -A.

C'est une bonne chose: vous voudrez probablement sauvegarder tous vos utilisateurs mysql, autorisations, 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 éventuellement changer à la fois le mot de passe root et le mot de passe debian-sys-maint, bien sûr, elle ne changera 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 plus quel est ce mot de passe!

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

Tout d'abord. Si le mot de passe root 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é apt-get mysql-server, il vous a probablement demandé le nouveau mot de passe root mysql et vous avez probablement utilisé le même que celui que vous utilisiez auparavant.

Corrige le mot de passe de debian sys maint.

Recherchez 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 il doit s'agir d'un fichier 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 pour vous assurer que cela fonctionne:

Sudo /etc/init.d/mysql restart

Conseil rapide

Si jamais vous avez besoin de réinitialiser le mot de passe root du serveur sans avoir à arrêter le serveur, ce compte d'utilisateur a le pouvoir de le faire - il suffit de récupérer le fichier debian.cnf et de vous connecter avec cet utilisateur. N.B. Protégez ce compte d'utilisateur comme root.

22
Jamieson Becker

2 autres conseils:

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

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

installez les paquets debsums, et vous pouvez tester quels paquets ont été modifiés (vérifiez qu'il est également disponible pour RPM, mais à mon humble avis fonctionne mieux).

6
elcuco
pkill mysql

fonctionnera certainement

5
Jonathan

En supposant que le paquet est quelque peu étrange, le problème pourrait être le fichier pid. Je soupçonne que les nouveaux paquets ou l'installation compilée n'ont pas créé/var/run/mysql/ou tout ce qui est standard sur Debian pour le fichier pid à écrire ou que le script init recherche le fichier mysqld.pid à un autre endroit. Si vous pouvez corriger l'inadéquation du fichier init/pid, les choses devraient probablement fonctionner.

2
kashani

Le script d'arrêt mysql utilise l'utilisateur debian-sys-maint pour exécuter "mysqladmin shutdown", en lisant le mot de passe de l'utilisateur dans /etc/mysql/debian.cnf. Vous devez vérifier que ce fichier existe et que vous pouvez exécuter l'arrêt mysqladmin en tant que cet utilisateur.

2
theotherreceive

Pour donner suite au commentaire de votre question, je vais écrire une réponse complète:

Le problème est que le socket par défaut est /tmp/mysql.sock avec la source MySQL et /var/run/mysqld/mysqld.sock avec les binaires Debian.

La solution est de corriger le chemin du socket in /etc/mysql/debian.cnf, en fournissant le bon socket=. Ou en le conservant, mais changez celui dans /etc/mysql/my.cnf.

Voici comment je l'ai découvert: dans /etc/init.d/mysql quand il y a le message "échoué", vous avez cette ligne appelée:

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

Cela m'a montré $MYADMIN ping, lequel est mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. L'exécution de cette même commande se termine sur:

/ usr/bin/mysqladmin: échec de la connexion au serveur sur 'localhost'

erreur: 'Impossible de se connecter au serveur MySQL local via le socket' /var/run/mysqld/mysqld.sock '(2)'

Vérifiez que mysqld est en cours d'exécution et que le socket: '/var/run/mysqld/mysqld.sock' existe!

J'ai donc jeté un œil à /etc/mysql/debian.cnf et a découvert que c'était la mauvaise prise.

1
Yvan

L'utilisation de "pkill mysql" entraînera également la perte de données, en particulier si elle est appelée "pkill -9" :(

Je recommanderais également d'utiliser 'sh -x' pour voir quel pourrait être le problème avec le script init, et vous pouvez également consulter les journaux d'erreurs pour MySQL (/ var/log/mysql ou /var/lib/mysql, selon la configuration) pour voir s'il est bloqué sur une vraiment requête longue ou quelque chose et donc pas disposé à quitter gracieusement encore tout à fait.

1
nixgeek

Vous pouvez techniquement y mettre fin avec:

pkill -9 mysqld

Mais vous pourriez perdre des données?

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

1
John Kurlak

utilisez la commande suivante:

$ mysqladmin shutdown

cela devrait être disponible dans le répertoire/usr/bin dans votre cas.

0
Masood Syed

vous devez être un super utilisateur pour commencer à arrêter mysql (et la plupart des autres services) sur debian.

Je ne sais pas si vous l'êtes déjà ou pas ... sinon, vous devez faire l'une des

  • connectez-vous en tant que root
  • mettez Sudo avant votre commande /etc/init.d/mysql restart (il vous demandera votre mot de passe et vous devrez être dans le groupe sudoers)
0
benlumley