web-dev-qa-db-fra.com

installation de mysql bloquée sur Ubuntu 16.04 (pas de privilège d'utilisateur root)

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

  • information_schema
  • tester

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?

6
user3177667

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

17
Benjamin Chodoroff

Enfin j'ai eu la solution de contournement. Voici ce que j'ai fait

  • Désinstallez mysql en utilisant Sudo apt purge mysql*
  • Supprimer le dossier /etc/mysql
  • Supprimez les dossiers /var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering.
  • Redémarrer
  • Installez mysql en utilisant 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).

7
user3177667

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)
2
user2656723