Sur mon serveur Ubuntu 16.04, j'essaie d'installer mysql avec la commande suivante
Sudo apt-get install mysql-server
A chaque fois, le message était bloqué:
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Renaming removed key_buffer and myisam-recover options (if present)
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.16, use --force if you still need to run mysql_upgrade
Je dois appuyer Ctrl+z pour l'arrêter. J'ai vérifié le fichier journal dans /var/log/mysql/error.log
et les 10 dernières lignes montrent ce résultat:
2017-01-18T09:07:30.329930Z 0 [Note] InnoDB: Buffer pool(s) load completed at 170118 9:07:30
2017-01-18T09:07:30.335086Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2017-01-18T09:07:30.335137Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2017-01-18T09:07:30.335157Z 0 [Note] - '127.0.0.1' resolves to '127.0.0.1';
2017-01-18T09:07:30.335216Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2017-01-18T09:07:30.349491Z 0 [Note] Event Scheduler: Loaded 1 event
2017-01-18T09:07:30.349749Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' started.
2017-01-18T09:07:30.350543Z 1 [ERROR] 1396 Operation ALTER USER failed for 'root'@'localhost'
2017-01-18T09:07:30.350737Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' ended.
2017-01-18T09:07:30.350864Z 0 [Note] mysqld: ready for connections.
Après un redémarrage, je me suis connecté à mysql avec mysql -u root
. Dans mysql, je ne peux effectuer aucune opération, créer un nouvel utilisateur ou modifier les privilèges. Je suis juste capable de parcourir les bases de données par défaut
quand j'ai tapé show grants
, il me montre le résultat suivant
+--------------------------------------+
| Grants for @localhost |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+
Ce qui est assez étrange. Pour m'en assurer, j'ai vérifié la table user_privileges
dans information_schema
qui me donne ceci:
+----------------+---------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------------+---------------+----------------+--------------+
| ''@'localhost' | def | USAGE | NO |
+----------------+---------------+----------------+--------------+
Comment puis-je activer l'accès root pour créer, mettre à jour?
Une solution simple consiste à Sudo killall mysqld
pendant l'exécution de l'opération apt-get.
L'opération apt a continué à fonctionner sans erreur après cela (!)
Source: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1596815
Enfin j'ai eu la solution de contournement. Voici ce que j'ai fait
Sudo apt purge mysql*
/etc/mysql
/var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering
.Sudo apt-get install mysql-server
Cette fois, mysql a été installé avec succès sans rester bloqué. Pendant l'installation, le mot de passe root m'a été demandé et j'en ai fourni un. Après l'installation, je me suis connecté avec root avec le mot de passe fourni. Cette fois, créer un nouvel utilisateur et tout mettre à jour fonctionne correctement. Maintenant, voici le résultat de show grants
:
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
Bien que je ne sache toujours pas pourquoi, à la première fois, cela n’a pas fonctionné. J'ai essayé en supprimant uniquement le fichier cnf mais cela n'a pas fonctionné. Quand j'ai supprimé tous les dossiers mysql à l'intérieur de /var/lib
, cela a fonctionné. Donc, je suppose qu'il y avait un fichier dans le répertoire /var/lib/msyql
qui empêchait de créer un nouvel utilisateur (même un utilisateur root).
Cela fait des mois que je cherche une solution aux problèmes de la configuration de mysql_server, qui s’est figée lors de l’installation d’autre chose, ce qui a obligé à tuer les processus et à démarrer manuellement mysql. Cela m'a également obligé à démarrer MySQL manuellement à chaque redémarrage de l'ordinateur.
J'ai édité la /var/lib/dpkg/info/mysql-server-5.7.postinst et j'ai remarqué que la partie configure) ne renvoie rien, elle est donc gelée.
Vous devez juste éditer ce fichier et ajouter à la fin de la section configure (avant la section sur abort-upgrade | abort-remove | abort-configure) une ligne qui dit "exit 0", autour de la ligne 290. Mine regarde maintenant comme ça:
# To avoid downgrades. This has to happen after the database is created, or --initialize will fail
touch $mysql_statedir/debian-5.7.flag
exit 0 # Corregimos el bug del postinst de mysql
;;
abort-upgrade|abort-remove|abort-configure)