[contourné]Mysql ne se lance pas au démarrage

Bonjour,

J’ai un problème d’accès à Roundcube :

DATABASE ERROR: CONNECTION FAILED! Unable to connect to the database! Please contact your server-administrator.

Je viens d’installer le serveur.

J’ai accès au serveur en local et à distance (l’adresse IP et nom de domaine) et je peux l’administrer.

Il m’est mpossible de lancer le service mysql :

> Lancer au démarrage : 
> enabled

> Statut : 
> inactive

Ou en console :

Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!     

J’avais songé à le réinstaller, mais je préfère demander avant de faire ça.

Merci à vous pour votre aide

Salut,

Difficile à dire sans plus d’infos.

Dis nous ce que tu trouves dans les logs de mysql se trouvant dans /var/log/mysql.

Si tu es sous Jessie tu peux également essayer quelques commandes systemd pour obtenir un peu plus d’infos, par exemple :

  • systemctl status mysql.service
  • journalctl -u mysql.service

A+

Bonjour,

Alors malheureusement il n’y a rien du tout dans le dossier /var/log/mysql.

Et je suis sous Wheezy.

Après épluchage de quelques forums, il semblerait que ça pourrait venir d’un problème de droits, alors voici un retour :

ls -ld /var ; ls -ld /var/run ; ls -ld /var/run/mysqld ; ls -l /var/run/mysqld

drwxr-xr-x 13 root root 4096 août 22 03:37 /var
lrwxrwxrwx 1 root root 4 août 22 03:26 /var/run -> /run
drwxr-xr-x 2 mysql root 60 août 24 02:04 /var/run/mysqld
total 0
lrwxrwxrwx 1 root root 25 août 24 02:04 mysqld.sock -> /var/lib/misql/mysql.sock 

N’hésitez pas à demander si vous voulez d’autres infos.

PS : quelques commandes en vrac :

grep mysql /var/log/syslog

http://paste.debian.net/304310

 cat /etc/mysql/my.cnf

http://paste.debian.net/304312

netstat -lpn

http://paste.debian.net/304313

    ls -alh /var/log/mysql*

-rw-r----- 1 mysql adm    0 août  22 03:37 /var/log/mysql.err
-rw-r----- 1 mysql adm    0 août  23 06:25 /var/log/mysql.log
-rw-r----- 1 mysql adm   20 août  22 03:37 /var/log/mysql.log.1.gz

/var/log/mysql:
total 8,0K
drwxr-s---  2 mysql adm  4,0K août  22 03:37 .
drwxr-xr-x 15 root  root 4,0K août  24 02:00 ..

Hello,

Il y a un truc qui me chagrine, mais peut être que c’est fonctionnel.

Au démarrage, le daemon cherche à se connecter à sa socket (mysqld.sock).

On le voit dans les logs :

Aug 23 16:03:26 yunohost /etc/init.d/mysql[3260]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' Aug 23 16:03:26 yunohost /etc/init.d/mysql[3260]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Ègalement dans ton fichier de conf :

[...] socket = /var/run/mysqld/mysqld.sock [...]

Or, d’apres les ls que tu as executés, le fichier qui devrait être un fichier socket semble être un lien symbolique qui pointe vers la fameuse socket (qui je pense n’en est pas une ?) :

Je ne sais pas si ça fonctionne mais je ne pense pas que le daemon aime beaucoup un lien symbolique en guise de socket. D’autant plus que la cible du lien me semble bizarre (le misql) :

Y’aurait pas eu un peu de bidouille ? :smile:

D’apres moi, la socket ne devrait pas exister si mysqld n’est pas démarré, le daemon la créer à son démarrage.

Bref, avant d’aller plus loin, il faudrait virer ce lien symbolique qui, à mon avis, n’a rien à faire ici.

$ cd /var/run
$ rm mysqld.sock

PS : Je te donne des commandes à l’aveugle - je ne connais pas ton systeme et ce que tu y a fais - ne les éxécute pas sans un minimum d’analyse (en plus je suis en train de boire biere … :)).

Essaies ensuite de relancer mysql. Si ça fonctionne, tu peux également virer la cible de ton lien (/var/lib/misql/mysql.sock).

A+

Salut,

Tchin :slight_smile:

La ligne doit être est une erreur de copie. Et non je n’ai rien bidouillé encore, attendons que ça marche avant. :smiley:

Sinon dans /var/run je n’ai point de mysqld.sock

J’ai commis une boullette (la biere surement…), j’ai mis “regarde dans /var/run/” mais je voulais écrire “/var/run/mysqld/”

As-tu la fameuse socket ici ?

Les permissions sur /var/run/mysqld ?

C’est pas grave ça change rien de toute manière. :slight_smile:

ls ne liste rien c’est bizarre.

drwxr-xr-x 2 mysql root 40 août 24 20:17 /var/run/mysqld

Non, c’est plutôt bon signe puisque ton mysql est arrếté, pas de fichier socket

Bon bah ça c’est ok aussi

Je suis un peu sec là …

Je réfléchi et je te tiens au jus

Pas de soucis, merci en tout cas.

Tiens je rajoute un autre fichier qui pourrait éventuellement aider :

/var/lib/mysql/yunohost.err

http://paste.debian.net/304590

Edit : ça ressemble bien à une base de données corrompue. :smiley:

Re,

Bon, alors la je te propose de faire un essai mais c’est un peu “hiphip houra” …

Lidée c’est que, selon tes derniers logs, il semble effectivement qu’une de tes tables systeme soit corrompue. Dans le cas qui nous interresse il semble que ce soit la table “host” :

[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format 'host'

J’ai parcouru quelques sites/forum décrivant cette erreur (cela semble courant, il y a même un post sur le forum yuno) et il apparait qu’une solution puisse fonctionner. Je l’ai testé sur une de mes bases (mais qui fonctionne bien). Franchement, je ne sais pas si cela peut fonctionner pour toi et les eventuelles conséquences (pertes de données, perte d’acces à la base, …).

Je te donne ce que j’ai trouvé et testé, à toi de voir si tu veux tenter le coup :smile:
Si tu le fais, dis nous si ça fonctionne, ça peut servir à d’autres.

Il y a 2 étapes :

  1. Démarrer mysql en contournant les systeme de privileges mysql (database en openbar)
  2. Se connecter à la db et executer une commande de réparation de la table host

1 - Executer mysql

Ouvre un premier termninal (execution en avant-plan) et execute avec le compte root la commande suivante :

$ mysqld --skip-grant-tables

Sur Jessie cela n’a pas focntionné, il semble qu’il ne soit pas possible d’executer mysqld avec le compte root. J’ai alors utilisé la commande suivante :

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"

Théoriquement tu devrais obtenir, sur ton terminal, un truc dans le genre :

150824 20:55:28 [Note] /usr/sbin/mysqld (mysqld 5.5.44-0+deb8u1) starting as process 2350 ...
150824 20:55:28 [Note] Plugin 'FEDERATED' is disabled.
150824 20:55:28 InnoDB: The InnoDB memory heap is disabled
150824 20:55:28 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150824 20:55:28 InnoDB: Compressed tables use zlib 1.2.8
150824 20:55:28 InnoDB: Using Linux native AIO
150824 20:55:28 InnoDB: Initializing buffer pool, size = 128.0M
150824 20:55:28 InnoDB: Completed initialization of buffer pool
150824 20:55:28 InnoDB: highest supported file format is Barracuda.
150824 20:55:28  InnoDB: Waiting for the background threads to start
150824 20:55:29 InnoDB: 5.5.44 started; log sequence number 3544121
150824 20:55:29 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
150824 20:55:29 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
150824 20:55:29 [Note] Server socket created on IP: '127.0.0.1'.
150824 20:55:29 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.44-0+deb8u1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Debian)

2 - Réparation de la table host

Ouvre un second terminal et connecte toi à mysql, utilise la séquence de commandes suivantes :

$ mysql
mysql> use mysql
mysql> repair table host use_frm;

La console mysql m’a renvoyé cette sortie :

 +------------+--------+----------+----------+
| Table      | Op     | Msg_type | Msg_text |
+------------+--------+----------+----------+
| mysql.host | repair | status   | OK       |
+------------+--------+----------+----------+
1 row in set (0.00 sec)

Si tu obtiens autre chose … bon bah … je ne sais pas :smile:

Une fois cela fais, tu sors de la console mysql (mysql> exit). Puis sur le premier terminal, tu arrête mysql avec un “control+c” (^c).

Maintenant essaie de relancer normalement mysql, si tu as de la chance ça marche.

J’ai lu des posts ou l’opération avait du être répétées pour d’autres tables detectées corrompues apres réparation de la table host.

Hope this helps

J’ai finalement réussi à contourner le problème en réinstallant le serveur sur une autre VM, et en finissant la post-install graphique par navigateur. Mais comme je suis sous machine virtuelle, ça ne m’empêche pas d’essayer de trouver l’erreur. : )

Je pense que ça peut venir du fait que je n’avais pas ouvert le port 3306 dans la Freebox, avant l’install. Alors qu’à la nouvelle installation, ce dernier était bien ouvert.

Par ailleurs on peut voir dans mon netstat (posté au dessus et en dessous du coup) que ce port est inexistant, et donc pas attribué à mysql. Alors que sur la nouvelle machine le port est bien connecté.

Si tu le fais, dis nous si ça fonctionne, ça peut servir à d'autres.

 1. Démarrer mysql en contournant les systeme de privileges mysql
    (database en openbar)

 2 - Réparation de la table host

Les opérations se sont passées comme prévues, mais l’erreur est toujours la même mysql ne se lance pas. Ce serait finalement une histoire de réglage de port, j’ai ouvert pourtant manuellement le port concerné :

sudo /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT 

Bon et bien merci pour le temps perdu, je vais mettre le sujet en [contourné] et si quelqu’un veut essayer de régler le problème, alors je garde la machine virtuelle sous le coude.

Bonjour,
Je reviens sur ce post car j’ai le même problème, la table host corrompue suite à une coupure de courant. J’essaie donc la méthode de Bidroik, mais je suis coincé sur la commande :

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"

Il me demande un mot de passe, j’ai essayé le mdp de root, de admin, celui trouvé dans /etc/yunohost/mysql, ça me met toujours : su : Erreur d'authentification.
Est-ce quelqu’un aurait une idée ?

Salut,

As-tu lancé cette commande avec le compte root ?

Si non, c’est normal le systeme te demande le mot de passe du compte “mysql”. Le probleme c’est que ce compte n’est pas actif, il n’a pas de mot de passe, il ne sert qu’à executer le daemon mysqld.

Bref, lance la commande alors que tu es connecté en root (si tu l’es déjà, y’a autre chose)

A+

J’ai essayé les deux. Si je la lance avec le compte root, j’ai une erreur du type “/usr/sbin/mysqld : commande (ou fichier je ne sais plus) introuvable”.
J’ai pas mal cherché et bidouillé avec un des développeurs de yunohost, sans succès, donc finalement je ré-installe…
Ce problème de corruption de mysql en cas de coupure de courant sera apparemment corrigé dans la prochaine mise à jour de yunohost.

Merci quand même !

Petit témoignage :
Je suis sur RPI3 / Raspbian Jessie et suite à une coupure de courant j’ai eu le même souci avec MySQL, la manipulation ci dessous pour réparer la base a très bien fonctionné, j’ai récupéré mon TTRSS et KanBoard :slight_smile:

Edit : ça n’a pas fonctionné parfaitement, je suis obligé de refaire la manipulation à chaque redémarrage.