MariaDB ne veut plus se lancer
Sur le serveur chinois que j’ai monté pour un de mes clients sur Codeable, le site a commencé à afficher des erreurs étranges : erreur 502 pour nginx sur certaines pages et des nombres étranges en lieu et place des données de la base de données.
Après un redémarrage des services PHP, nginx et mysql, je constate que MariaDB veut bien s’arrêter mais ne veut plus de lancer.
Voici ce que donne:
systemctl status mariadb.service
Code language: CSS (css)
Résultat:
● mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2019-04-22 18:14:22 CST; 59s ago
Process: 721 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 718 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
Process: 12274 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
Process: 12179 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited,
Process: 12176 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 12173 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Main PID: 12274 (code=exited, status=1/FAILURE)
Status: "MariaDB server is down"
systemd[1]: Starting MariaDB database server…
mysqld[12274]: 2019-04-22 18:14:19 140194687476288 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 12274 …
systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start MariaDB database server.
systemd[1]: mariadb.service: Unit entered failed state.
systemd[1]: mariadb.service: Failed with result 'exit-code'.
Code language: PHP (php)
Bon, chou blanc. Cela ne nous donne aucune information exploitable quand à l’erreur qui empêche le démarrage du service de base de données.
Solution: vérifier l’espace disponible sur le disque du serveur
On regarde ensuite ce que nous donnent les logs de MariaDB:
tail -f /var/log/mysql/error.log
Code language: JavaScript (javascript)
Résultat:
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Completed initialization of buffer pool
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Highest supported file format is Barracuda.
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: 128 rollback segment(s) are active.
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Waiting for purge to start
2019-04-22 18:14:19 140194687476288 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.36-82.1 started; log sequence number 11397472969
2019-04-22 18:14:19 140194687476288 [Note] Plugin 'FEEDBACK' is disabled.
2019-04-22 18:14:19 140194687476288 [ERROR] mysqld: Can't change size of file (Errcode: 28 "No space left on device")
2019-04-22 18:14:19 140194687476288 [ERROR] Can't init tc log
2019-04-22 18:14:19 140194687476288 [ERROR] Aborting
Code language: PHP (php)
Là, c’est beaucoup plus intéressant. Visiblement, deux erreurs majeures sont à l’origine du non-démarrage du service:
- il n’y a plus d’espace disponible sur le disque dur du serveur,
- le fichier
/var/lib/mysql/tc.log
ne peut pas être initialisé.
Après un petit df
, il s’avère que le client a installé un plugin de sauvegarde qui a littéralement saturé tout l’espace disponible.
Après un petit ménage, il ne reste plus qu’à gérer la seconde erreur, Can’t init tc log.
Le fichier /var/lib/mysql/tc.log
peut parfois souffrir d’un problème de permission.
Dans le cas du client, on l’archive par précaution:
mv /var/lib/mysql/tc.log /var/lib/mysql/tc_bakup.log
Code language: JavaScript (javascript)
Puis on relance le serveur MariaDB:
service mysql start
On vérifie le statut du service:
service mysql status
qui nous retourne:
service mysql status
● mariadb.service - MariaDB database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-04-22 18:17:22 CST; 1h 37min ago
Process: 12467 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 12464 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
Process: 12340 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited,
Process: 12337 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 12334 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Main PID: 12437 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 29 (limit: 4915)
CGroup: /system.slice/mariadb.service
└─12437 /usr/sbin/mysqld
Apr 22 18:17:20 iZuf6aj6jz83uxa0jgbgcrZ systemd[1]: Starting MariaDB database server...
Apr 22 18:17:21 iZuf6aj6jz83uxa0jgbgcrZ mysqld[12437]: 2019-04-22 18:17:21 139940495544896 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process 12437 ...
Apr 22 18:17:22 iZuf6aj6jz83uxa0jgbgcrZ systemd[1]: Started MariaDB database server.
Code language: PHP (php)
A noter que l’erreur 502 de nginx n’était pas due à une mauvaise configuration du server block mais bien d’un manque d’espace disque.
C’est important à vérifier, avant de se lancer dans la dissection du fichier de configuration d’nginx (qui n’aurait pas réglé le problème dans ce cas précis).
Recherchez-vous un expert WordPress ou WooCommerce sur qui vous pouvez compter? Ne cherchez plus.
Merci pour l’astuce, je ne savais pas à quoi correspondait ce tc log.
Maintenant ca redémarre.
Je t’en prie 6ko !
Je t’aime
Merci pour le partage
Je t’en prie Benjamin :)
Merci beaucoup,
Suite à une saturation de disque j’avais un problème similaire, tout fonctionne maintenant.
Dominique
Effectivement c’était bien lié à un manque d’espace (Docker et son devicemapper…) Ce qui avait empêché l’initialisation du log de mariadb. Merci beaucoup.
Troooooooop fort !!!! Merci la manip sur tc.log a fait tout remarcher sur mon serveur ubuntu en rade après un disque plein, j’étais désespéré et avais essayé plein de trucs qui ne fonctionnaient pas, ahhhh mille mercis !!!!!!!!!
Je t’en prie marco :)
Hello,
Un grand merci pour l’article, comme pour les autres, le fait de faire mv /var/lib/mysql/tc.log /var/lib/mysql/tc_bakup.log
a corrigé mon problème.
TOP !!