mysql ne demande pas de mot de passe root lors de l'installation

54

J'avais l'habitude apt install mysql-serverd'installer MySQL sur Ubuntu 16.04 mais lors de l'installation, il ne demandait pas de mot de passe root.

Après l’installation, j’ai eu ERROR 1045lorsque j’essayais de me connecter rootet mysql_secure_installationjeté la même erreur. Je purged et autoremoved puis réinstallé mais cela ne fonctionne pas.

Comment pourrais-je résoudre ce problème? Puis-je définir le mot de passe root si je ne l'ai pas défini lors de l'installation?

Ceci est mon journal d'installation:

Les packages supplémentaires suivants seront installés:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server-5.7
  mysql-server-core-5.7
Forfaits suggérés:
  mailx tinyca
Les NOUVEAUX packages suivants seront installés:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-server mysql-server-5.7
  mysql-server-core-5.7
0 mis à niveau, 6 nouvellement installés, 0 à supprimer et 0 non mis à niveau.
Besoin d'obtenir 0 B / 17,9 Mo d'archives.
Après cette opération, 160 Mo d’espace disque supplémentaire seront utilisés.
Voulez-vous continuer? [Y / n] y
Préconfiguration des packages ...
Sélection du paquet précédemment non sélectionné libaio1: amd64.
(Lecture de la base de données ... 227144 fichiers et répertoires actuellement installés.)
Préparation à la décompression ... / libaio1_0.3.110-2_amd64.deb ...
Déballage de libaio1: amd64 (0.3.110-2) ...
Sélection du paquetage précédemment non sélectionné mysql-client-core-5.7.
Préparation à la décompression ... / mysql-client-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
Déballer mysql-client-core-5.7 (5.7.12-0ubuntu1) ...
Sélection du paquet précédemment non sélectionné mysql-client-5.7.
Préparation à la décompression ... / mysql-client-5.7_5.7.12-0ubuntu1_amd64.deb ...
Déballer mysql-client-5.7 (5.7.12-0ubuntu1) ...
Sélectionner le paquet précédemment non sélectionné mysql-server-core-5.7.
Préparation à la décompression ... / mysql-server-core-5.7_5.7.12-0ubuntu1_amd64.deb ...
Déballer mysql-server-core-5.7 (5.7.12-0ubuntu1) ...
Sélection du paquetage précédemment non sélectionné mysql-server-5.7.
Préparation à la décompression ... / mysql-server-5.7_5.7.12-0ubuntu1_amd64.deb ...
Déballer mysql-server-5.7 (5.7.12-0ubuntu1) ...
Sélection du paquet mysql-server précédemment non sélectionné.
Préparation à la décompression ... / mysql-server_5.7.12-0ubuntu1_all.deb ...
Déballer mysql-server (5.7.12-0ubuntu1) ...
Traitement des déclencheurs pour libc-bin (2.23-0ubuntu3) ...
Traitement des déclencheurs pour man-db (2.7.5-1) ...
Traitement des déclencheurs pour systemd (229-4ubuntu4) ...
Traitement des déclencheurs pour ureadahead (0.100.0-19) ...
Mise en place de libaio1: amd64 (0.3.110-2) ...
Mise en place de mysql-client-core-5.7 (5.7.12-0ubuntu1) ...
Mise en place de mysql-client-5.7 (5.7.12-0ubuntu1) ...
Configurer mysql-server-core-5.7 (5.7.12-0ubuntu1) ...
Mise en place de mysql-server-5.7 (5.7.12-0ubuntu1) ...
update-alternatives: utilisation de /etc/mysql/mysql.cnf pour fournir /etc/mysql/my.cnf (my.cnf) en mode automatique
Vérifier si une mise à jour est nécessaire.
Cette installation de MySQL est déjà mise à jour vers la version 5.7.12, utilisez --force si vous avez toujours besoin d’exécuter mysql_upgrade
Configuration de mysql-server (5.7.12-0ubuntu1) ...
Traitement des déclencheurs pour libc-bin (2.23-0ubuntu3) ...
spqa
la source

Réponses:

61

Vous pouvez récupérer ou définir un mot de passe root sans connaître le mot de passe actuel en démarrant mysql sans charger les tables de subvention.

S'il vous plaît noter le $dans les commandes. Il s’agit de spécifier l’invite de terminal que vous voyez lors de la saisie de la commande. Cela montre que c'est une ligne de texte, mais une commande de terminal dactylographiée. Le mysql>préfixe " " est également une invite. C'est l'invite que vous obtenez lorsque vous exécutez mysql de manière interactive.

Ce sont les cli (ligne de commande) pour faire cela:
(Assurez - vous d' arrêter le serveur . Avant d' effectuer les étapes un seul serveur peut fonctionner à la fois.)

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld
$ sudo mysqld_safe --skip-grant-tables&

Maintenant, vous pouvez vous connecter en tant que root sans mot de passe et exécuter toutes les commandes. Dans ce cas, définissez le mot de passe root en tant que root.

$ sudo mysql --user=root mysql

C'est le mot de passe root que vous utiliserez dans mysql si vous avez MySQL 5.6 ou une version antérieure:

mysql> update user set Password=PASSWORD('new-password') where user='root';
flush privileges;

Dans MySQL 5.7 ou supérieur

mysql> update user set authentication_string=PASSWORD('new-password') where user='root';
flush privileges;

À partir de là, quittez mysql (tuez le msqld en cours d’exécution) et démarrez-le normalement.

Remarques sur le démarrage et l’arrêt du service mysql:

Arrêtez mysql:

$ sudo service mysql stop

Démarrer mysql (normal):

$ sudo service mysql start

Tuer la session temporaire en mode sans échec mysql:

$ sudo mysqladmin shutdown
LD James
la source
11
dans mysql 5.7.12, il n'y a pas de colonne nommée mot de passe dans la table utilisateur. Par conséquent, la commande suivante a fonctionné pour moi. update user set authentication_string = PASSWORD ('nouveau-mot de passe') où user = 'root';
Le code
7
Je suis toujours en train de recevoirERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
llamerr
@ ErelSegal-Halevi Il y a deux choses que vous devriez faire. Courez $ mysql_upgrade -u root -p. Essayez également la commande ci-dessus donnée par RP Singh.
LD James
Je reçois aussi toujours cette erreur.
Jamie Hutber le
SET PASSWORD FOR 'root' = PASSWORD('your-password')si vous utilisez mariadb
user1036719 Le
37

Il ne vous demandera pas le mot de passe lors de l'installation mysqldans Ubuntu 16.04, mais vous pouvez le définir après une installation réussie de la manière suivante:

Une fois l'installation de mysql terminée, exécutez la commande suivante:

sudo mysql_secure_installation

Il montrera:

REMARQUE: L'UTILISATION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MariaDB UTILISÉS EN PRODUCTION! VEUILLEZ LIRE ATTENTIVEMENT CHAQUE ÉTAPE!

Pour vous connecter à MariaDB afin de le sécuriser, nous avons besoin du mot de passe actuel de l'utilisateur root. Si vous venez d'installer MariaDB et que vous n'avez pas encore défini le mot de passe root, celui-ci sera vide. Vous devez donc appuyer sur Entrée ici.

Enter current password for root (enter for none): (appuyez ici sur Entrée)

OK, mot de passe utilisé avec succès, passe à autre chose ...

La définition du mot de passe root garantit que personne ne peut se connecter à l'utilisateur root MariaDB sans l'autorisation appropriée.

Set root password? [Y/n] y   (press 'y' to set new password)
New password: 
Re-enter new password:

Mot de passe mis à jour avec succès! Rechargement des tables de privilèges ... ... Succès!


Pour Ubuntu 18.04 OU mysql-serverversion 5.7.22, CETTE MÉTHODE NE FONCTIONNERA PAS

Pour définir le mot de passe root dans Ubuntu 18.04, suivez d'abord les trois premières commandes ou les deux premières étapes de la réponse de LD James, puis exécutez-la.

mysql> alter user 'root'@'localhost' identified by '<password>';

Le mot de passe pour l'utilisateur root est défini!

OU

Suivez ces étapes pour définir le mot de passe root dans 18.04:

Comme il n'y a pas de mot de passe défini pour l'utilisateur root, connectez-vous simplement avec un mot de passe vide

sudo mysql -u root -p
Enter password: (press enter as no password is set)

après alors peut facilement exécuter la requête

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Marguerite
la source
2
Le problème dans le cas de cette question est que l'utilisateur ne peut pas accéder aux invites que vous avez mentionnées car il ne le sait pas current password for root.
LD James
@LDJames oui, tu as raison. Je ne me rappelle pas d'ERREUR: 1405 quand je cours mysql_secure_installationmais que j'ai sudo mysql_secure_installationtravaillé pour moi. L'installation de MySQL ne demande pas de mot de passe. Il m'est arrivé la même chose. et here press entersignifie appuyer sur entrée sans mot de passe.
marguerite
2
En ce qui concerne ubuntu 18.04 ou debian 9+, il ne se connecte pas avec un mot de passe vide et même après avoir réinitialisé le mot de passe root, il refuse toujours de se connecter
chefarov
@chefarov Face au même problème, extrêmement frustrant
RedactedProfile
En effet, je reçois toujours la même erreur
Jamie Hutber
17

Apparemment, l'installation de mysql-server sur 16.04 (ou toute autre installation de 5.7?) Permet l'accès root non par mot de passe, mais par le plugin auth_socket . Exécuter sudo mysql -u root(nb sans mot de passe) vous donnera la console mysql, alors que l’exécution de la commande en tant qu’utilisateur non root vous invite à entrer un mot de passe.

Il semblerait que le changement de mot de passe ne fasse pas une grande différence, car l'authentification ne vérifie même pas le mot de passe. Il existe un article très complet sur la modification du plug-in et le passage à l'authentification par mot de passe .

carpe
la source
4
J'ai été en mesure de confirmer avec une nouvelle installation de apt install mysql-serversans spécifier un mot de passe sur 18.04. Le symptôme et la solution est exactement comme décrit.
EricC
alors comment diable je me connecte?
Jamie Hutber le
9

Après l'installation, il suffit de:

1.

sudo mysql

(oui, pas d'utilisateur, pas de passe)

2.Vous êtes maintenant dans la console mysql:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_new_pass';

3

FLUSH PRIVILEGES;

  1. C'est ça. Vous pouvez maintenant entrer dans la console la prochaine fois, comme d'habitude:

    mysql -u root -p my_new_pass

DimiDak
la source
3
J'ai essayé beaucoup d'autres réponses, mais celle-ci a fonctionné sur Amazon EC2
Haris ur Rehman
2
C'était la réponse correcte pour WSL Ubuntu (Linux sur Windows).
Fer García
2
C'est la seule réponse qui a fonctionné pour moi sur la nouvelle installation d'ubuntu 18.04 sur google cloud.
Aakash
1
Travaillé pour moi sur Ubuntu 19.04. J'ai exécuté mysql_secure_myinstallation, mais il semblait que le mot de passe root n'était pas défini.
Jens Wagemaker
1
J'ai essayé des dizaines de solutions. C'était le plus facile et le seul qui a fonctionné.
mreff555
4
  1. il existe un compte d'utilisateur par défaut.

    $ vim /etc/mysql/debian.cnf 
    

    vous obtiendrez ce compte comme ceci:

    user     = debian-sys-maint
    password = nUZTARYslBsASzpw
    
  2. vous vous connectez avec ce compte

    $ mysql -u debian-sys-maint -p
    
  3. éditez votre mot de passe root

    mysql> show databases;
    
    mysql> use mysql;
    
    mysql> update user set authentication_string=PASSWORD("new_password") where user='root';
    
    mysql> update user set plugin="mysql_native_password";
    
    mysql> flush privileges;
    
    mysql> quit;
    
  4. redémarrer mysql

    $ /etc/init.d/mysql restart;
    

alors vous pouvez mysql -u root -pavec votre réglage précédent.

pwxcoo
la source
J'ai essayé toutes les autres solutions, et c'est la seule qui a fonctionné pour moi. (Linux Mint 19.2).
ElectroBuddha
0

Ajoutant à la réponse principale, Si vous êtes bloqué à

" mysqld_safe Démarrer le démon mysqld avec les bases de données de / var / lib / mysql "

Une chose à retenir est que vous devez utiliser une autre fenêtre de terminal pour entrer la commande suivante.

$ sudo mysql --user=root mysql

Si vous essayez de le faire dans la même fenêtre, le processus mysqld safemode sera arrêté.

Mohd Abdul Mujib
la source
-1

Voici comment configurer mysql-serverune invite de mot de passe de terminal dans Ubuntu 18.10.

  1. Téléchargez le référentiel APT MySQL via https://dev.mysql.com/downloads/repo/apt/.
  2. cddans votre répertoire où vous avez téléchargé et exécuté dpkg -i mysql-apt-config_0.8.13-1_all.deb(vérifiez votre numéro de version)
  3. Dans le menu contextuel, sélectionnez la dernière option "ok" puis "ok" à nouveau.

  4. Mettez à jour et installez mysql-server et mysql-client:

sudo apt update
sudo apt installer mysql-server mysql-client
  1. Tapez votre mot de passe root dans le promt.
  2. Choisissez "Use Legacy Authentication Method"si vos frameworks / applications en cours d'exécution (tels que laravel) qui ne prennent pas en charge le nouveau "Strong Password Encryption", sinon, si votre framework / application prend en charge, "Strong Password Encryption"sélectionnez-le.
  3. Connectez-vous en tant que root et vérifiez si cela fonctionne.
ThomasAFink
la source