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?
MODIFIER LA MISE À JOUR en tant que 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.
/tmp/mysql.sock
plutôt que/var/run/mysqld/mysqld.sock
. Le script des responsables Debian émettait donc une erreur, en silence. Il suffit de réparersocket=
le/etc/mysql/debian.cnf
Réponses:
devrait fonctionner pour arrêter le serveur.
Je vois deux possibilités probables:
Que
dpkg --list mysql\*
dit-on?Que dit /var/log/mysql.err? Ou les autres journaux mysql?
MODIFIER:
Alors ça
mysqladmin shutdown
a marché?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? La course
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
... Peut-être que vous avez de la chance et ils ne l'ont cassé que ...la source
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 les anciens et les nouveaux serveurs, vous pouvez utiliser mysqladmin pour le corriger:
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.
Correction du mot de passe de debian sys maint.
Alors maintenant, recherchez 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é.)
Maintenant, connectez-vous à mysql en utilisant le mot de passe root que vous avez défini ci-dessus:
Réinitialisez le mot de passe de l'utilisateur debian-sys-maint et n'oubliez pas de vider les privilèges:
Testez pour vous assurer que cela fonctionne:
la source
2 autres conseils:
Cela vous montrera les commandes exécutées par le script init.
installez le paquet debsums, et vous pouvez tester quels paquets ont été modifiés (vérifiez qu'il est également disponible pour RPM, mais IMHO fonctionne mieux).
la source
"Access denied for user 'debian-sys-maint'@'localhost'"
, ce qui était absolument correct: ma base de données mysql n'avait pas encore attribué d' autorisations, doncmysql stop
n'avait pas les autorisations dans la base de données elle-même pour s'arrêter. Un manuelmysqladmin shutdown
fonctionnait parfaitement.fonctionnera certainement
la source
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.
la source
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.
la source
Vous pouvez techniquement y mettre fin avec:
Mais vous pourriez perdre des données?
Vous feriez mieux de demander à quelqu'un à http://www.serverfault.com
la source
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, en fonction de la configuration) pour voir s'il est bloqué sur une requête très longue ou quelque chose comme ça et donc pas disposé à quitter gracieusement encore.
la source
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 fixer le chemin du socket en
/etc/mysql/debian.cnf
fournissant le biensocket=
. Ou en le gardant, mais changez ensuite celui-ci/etc/mysql/my.cnf
.Voici comment je l'ai découvert:
/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 fait remarquer
$MYADMIN ping
, ce qui estmysqladmin --defaults-file=/etc/mysql/debian.cnf ping
. L'exécution de cette même commande se termine sur:J'ai donc jeté un coup d'œil
/etc/mysql/debian.cnf
et j'ai découvert que c'était la mauvaise prise.la source
utilisez la commande suivante:
$ mysqladmin shutdown
cela devrait être disponible dans le répertoire / usr / bin dans votre cas.
la source
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
la source