Je voulais vérifier à nouveau mon serveur de journalisation, mais tout à coup, je reçois ce message lorsque je visite l'URL:
Je cours sur Ubuntu Xenial
FATAL: Impossible de se connecter au serveur MySQL sur 'localhost'. Assurez-vous d'avoir spécifié un nom de base de données MySQL valide dans 'include/config.php'
quand je fais journalctl -xe j'obtiens le message suivant:
-- Unit mysql.service has begun starting up.
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=0
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:69): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld"
name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_m
Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:70): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r"
Jun 15 19:26:12 arjanlog kernel: audit: type=1400 audit(1497547572.504:71): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_m
Jun 15 19:26:12 arjanlog systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
J'ai eu ce problème aussi et je l'ai résolu en corrigeant le fichier de configuration apparmor à /etc/apparmor.d/usr.sbin.mysqld
. J'ai ajouté ces lignes:
/proc/*/status r,
/sys/devices/system/node/ r,
/sys/devices/system/node/node0/meminfo r,
Votre sortie journalctl -xe
affiche les fichiers que MySQL a besoin de l'autorisation d'utiliser. Vous pouvez également regarder dans /var/log/syslog
:
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=0
Jun 15 19:26:12 arjanlog audit[3665]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/3665/status" pid=3665 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=112 ouid=112
Cela signifie que /usr/sbin/mysqld
était DENIED
en essayant d'ouvrir /proc/3665/status
et /sys/devices/system/node/
en lecture (r
).
Notez que dans le fichier de configuration apparmor, la barre oblique de fin dans /sys/devices/system/node/
est nécessaire, alors ne la laissez pas de côté!
Il n'est peut-être pas nécessaire d'arrêter complètement Apparmor. Il devrait suffire de force brute pour désactiver apparmor pour mysqld, si vous ne voulez pas identifier le problème principal:
ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld
J'ai lu dans un autre commentaire de thread SO que le message apparmor="DENIED"
n'est probablement pas la raison pour laquelle MySQL (ou dans mon cas MariaDB) n'a pas démarré, car il ne s'agit que d'un avertissement.
Dans mon cas, la mise à jour et la mise à niveau des paquetages installés par apt et le redémarrage du système ont résolu le problème.
Sudo apt-get dist-upgrade
Sudo apt-get update
Sudo apt-get upgrade
Sudo reboot
Ensuite, vous devrez attendre quelques minutes pendant que le système redémarre, puis reconnectez-vous et redémarrez le (s) service (s) avec service
, systemctl
et je pense éventuellement /etc/system.d
.
Ensuite, MariaDB s'est dégagée joyeusement.
Il y a un bon article sur les différentes commandes apt upgrade
ici , et je pense que ce que update
fait, c'est mettre à jour les listes de sources.
J'avais également trouvé cette commande utile lorsqu'il n'y avait pas de fichier journal dans /var/log/mysql
:
tail -f /var/log/syslog | grep mysql
Pour moi, l’erreur était que la base de données mysql avait été corrompue. Je pouvais le voir quand je suis allé dans les logs /var/log/mysql/error.log
et que ça montrait une erreur:
InnoDB: Database was not shutdown normally!
Il y avait des solutions que quelqu'un pourrait utiliser comme problème de corruption de table
Mais cela n'a pas fonctionné pour moi car je ne pouvais pas démarrer un serveur en mode WRITE
afin de résoudre le problème.
J'ai réussi à résoudre le problème en créant une copie du répertoire /var/lib/mysql
. J'ai copié le fichier dans mysql.old
, puis supprimé le répertoire mysql
.
Puis j'ai appelé une commande en terminal:
Sudo mysqld --initialize --initialize-insecure
Pour générer un nouveau répertoire mysql
J'ai ensuite modifié les autorisations du nouveau répertoire en modifiant l'utilisateur et le groupe du répertoire mysql
en utilisateur: mysql
et groupe: mysql
. Utilisez la commande chown
:
Sudo chown -R mysql:mysql /var/lib/mysql
Puis j'ai appelé la commande:
Sudo mysql -u root
et changé le mot de passe avec:
SET PASSWORD FOR root@'localhost' = PASSWORD('newpassword');
Et puis redémarré le serveur mysql:
Sudo service mysql restart
Et tout a fonctionné.
Certaines des commandes que j'ai utilisées en cours de route étaient (bien que je ne sois pas sûr de leur contribution à la résolution du problème):
Sudo apt-get --reinstall install mysql-server-5.7
J'ai eu ce bogue lorsque j'ai essayé de déplacer le fichier mysql de/var/lib/mysql vers un autre emplacement.
ajouter config à /etc/apparmor.d/usr.sbin.mysqld n'a pas fonctionné pour moi
alors j'ai eu ce bug pour ubuntu
Ça disait:
Sudo nano /etc/apparmor.d/usr.sbin.mysqld
line 25 after:
# Allow config access
/etc/mysql/** r,
-add line:
/etc/mysql/* r,
et cela fonctionne pour moi:
ajouter /etc/mysql/* r,
à /etc/apparmor.d/usr.sbin.mysqld
exécuter systemctl restart apparmor.service
et service mysql start