Après avoir suivi instructions dans cet article sur la façon d’installer MySQL 5.6 sur une installation 5.7 existante sur Ubuntu 16.04, plusieurs problèmes de démarrage du service se sont produits.
Tout d'abord, c'est arrivé:
Failed to start mysql.service: Unit mysql.service is masked
Ce qui a été résolu en exécutant systemctl unmask mysql.service
. Cependant, à plusieurs reprises, j'ai eu ce message:
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
L'inspection de systemctl status mysql.service
a montré:
Failed to start LSB: Start and stop the mysql database server daemon.
Le correctif de ce problème contenait plusieurs étapes, y compris différents journaux de débogage, puis des indices dans ces journaux. Je les documente pour aider les autres - vos problèmes pourraient être différents mais ce processus devrait vous aider à découvrir ce qui ne va pas:
Tout d'abord, journalctl -xe
contient beaucoup plus d'informations. Dans mon cas, il contenait:
kernel: audit: type=1400 audit(1528794958.103:169): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/etc/mysql/my.cnf.fallback"
Cela pourrait être corrigé avec vi /etc/apparmor.d/usr.sbin.mysqld
et en ajoutant des lignes pour:
/etc/mysql/conf.d/mysql.cnf/ r,
/etc/mysql/conf.d/mysql.cnf/* r,
/etc/mysql/my.cnf.fallback r,
Un point intéressant est qu’il a besoin d’une ligne distincte pour un répertoire et de fichiers génériques qui le composent. Cela peut être courant pour certaines applications Unix, mais toutes ne peuvent pas vous tromper.
Une fois que toutes les modifications apportées à l’application ont été effectuées, le système ne démarre toujours pas et cette fois, la commande journalctl -xe
ne produit rien d’utile.
J'ai ensuite pu exécuter Sudo -u mysql mysqld
pour essayer de démarrer le démon manuellement. Cela montrait un échec au démarrage d'InnoDB, mais pas pourquoi.
Sur un coup de tête, j'ai supprimé les fichiers /var/lib/mysql/ib_logfile*
et ib_binlog
et j'ai réessayé; cette fois le serveur a démarré. J'ai ensuite pu mettre fin à cette tâche et exécuter service start mysql
, ce qui a fonctionné.
Séparément, j'ai supprimé /var/lib/mysql/debian-5.7.flag
- Je ne sais pas si cela a aidé ou aurait causé des problèmes ultérieurs si je ne l'avais pas fait.
Espérons que cet exemple aide quelqu'un; n'hésitez pas à ajouter d'autres réponses dans le même sens si vous rencontrez des problèmes différents avec ce processus.
Commencez par arrêter mysql, s'il est en cours d'exécution
BACKUP=/var/tmp/broken-mysql
Sudo mkdir -p $BACKUP # create backup dir
Sudo mv -vi /var/lib/mysql* $BACKUP # Remove any old database setup
Sudo mysql_install_db -u mysql # Install new database
Sudo systemctl unmask mysql.service # Enables the service for systemd
Sudo service mysql start # Start the service
Après la mise à niveau de la version de MySQL, je suis également confronté à cette commande d'essai suivante
systemctl unmask mysql.service
service mysql start