web-dev-qa-db-fra.com

Changer le mot de passe root mysql sur Centos7

J'ai installé mySQL sur une machine virtuelle Centos7, mais j'ai des problèmes de connexion avec root. J'ai essayé de me connecter sans mot de passe ou d'essayer tous ceux par défaut (comme mysql, admin, etc.). J'ai consulté le fichier my.cnf et il n'y a pas de mot de passe. J'ai essayé de changer le mot de passe en arrêtant le service et en le redémarrant avec mysqld_safe --skip-grant-tables & mais je reçois ce mysqld_safe:command not found je ne sais pas du tout quoi faire. Tous les conseils/idées seraient grandement appréciés!

43
KeykoYume

Quelle version de MySQL utilisez-vous? J'utilise 5.7.10 et j'ai eu le même problème de connexion en tant que root

Il y a 2 problèmes - pourquoi ne puis-je pas me connecter en tant que root pour commencer, et pourquoi ne puis-je pas utiliser 'mysqld_safe` pour démarrer mySQL afin de réinitialiser le mot de passe root?.

Je n'ai pas de réponse à la configuration du mot de passe root lors de l'installation, mais voici ce que vous faites pour réinitialiser le mot de passe root

Editez le mot de passe root initial lors de l'installation peut être trouvé en exécutant

grep 'temporary password' /var/log/mysqld.log

http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html


  1. systemd est maintenant utilisé pour s'occuper de MySQL au lieu de mysqld_safe (c'est pourquoi vous obtenez l'erreur -bash: mysqld_safe: command not found - elle n'est pas installée)

  2. La structure de la table user a changé.

Donc, pour réinitialiser le mot de passe root, vous devez toujours démarrer MySQL avec les options --skip-grant-tables et mettre à jour la table user, mais la procédure utilisée a changé.

1. Stop mysql:
systemctl stop mysqld

2. Set the mySQL environment option 
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. Start mysql usig the options you just set
systemctl start mysqld

4. Login as root
mysql -u root

5. Update the root user password with these mysql commands
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
    -> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

*** Edit ***
As mentioned my shokulei in the comments, for 5.7.6 and later, you should use 
   mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
Or you'll get a warning

6. Stop mysql
systemctl stop mysqld

7. Unset the mySQL envitroment option so it starts normally next time
systemctl unset-environment MYSQLD_OPTS

8. Start mysql normally:
systemctl start mysqld

Try to login using your new password:
7. mysql -u root -p

Référence

Comme il est dit à http://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html ,

Remarque

Depuis MySQL 5.7.6, pour l’installation de MySQL à l’aide d’une distribution RPM, le démarrage et l’arrêt du serveur sont gérés par systemd sur plusieurs plates-formes Linux. Sur ces plateformes, mysqld_safe n'est plus installé car il est inutile. Pour plus d'informations, reportez-vous à la Section 2.5.10, "Gestion du serveur MySQL avec systemd".

Ce qui vous amène à http://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html où il mentionne le systemctl set-environment MYSQLD_OPTS= vers le bas de la page.

Les commandes de réinitialisation du mot de passe se trouvent au bas de http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

223
Kevin Jones

Utilisez les étapes ci-dessous pour réinitialiser le mot de passe.

$ Sudo systemctl start mysqld

Réinitialisez le mot de passe root du serveur MySql.

$Sudo grep 'temporary password' /var/log/mysqld.log

Sortir quelque chose comme-:

 10.744785Z 1 [Note] A temporary password is generated for root@localhost: o!5y,oJGALQa

Utilisez le mot de passe ci-dessus lors de la réinitialisation du processus mysql_secure_installation.

<pre>
    $ Sudo mysql_secure_installation
</pre>
   Securing the MySQL server deployment.

   Enter password for user root: 

Vous avez correctement réinitialisé le mot de passe root de MySql Server. Utilisez la commande ci-dessous pour vérifier si le serveur mysql se connecte ou non.

$ mysql -u root -p

http://gotechnies.com/install-latest-mysql-5-7-rhelcentos-7/

11
Arvind

J'ai utilisé les conseils de Kevin Jones ci-dessus avec le changement suivant - skip-networking pour une sécurité légèrement meilleure:

Sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

[user@machine ~]$ mysql -u root

Ensuite, lorsque j'ai tenté de réinitialiser le mot de passe, j'ai reçu une erreur, mais googler ailleurs m'a suggéré de continuer. Ce qui suit a travaillé:

mysql> select user(), current_user();
+--------+-----------------------------------+
| user() | current_user()                    |
+--------+-----------------------------------+
| root@  | skip-grants user@skip-grants Host |
+--------+-----------------------------------+
1 row in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
[user@machine ~]$ systemctl stop mysqld
[user@machine ~]$ Sudo systemctl unset-environment MYSQLD_OPTS
[user@machine ~]$ systemctl start mysqld

À ce moment-là, j'ai pu me connecter.

11
user48918

Tout,

Voici un peu de torsion avec mysql-community-server 5.7 Je partage quelques étapes, comment réinitialiser le mot de passe root mysql5.7 ou définir un mot de passe. cela fonctionnera aussi bien avec centos7 que RHEL7.

étape 1. 1er arrêt de vos bases de données

service mysqld stop

étape 2. 2ème fichier /etc/my.cnf de modification ajouter "skip-grant-tables"

vi /etc/my.cnf

[mysqld] skip-grant-tables

étape 3. 3ème démarrage de mysql

service mysqld start

étape 4. sélectionnez la base de données mysql par défaut

mysql -u root

mysql>use mysql;

étape 4. définir un nouveau mot de passe

mysql> update user set authentication_string=PASSWORD("yourpassword") where User='root';

step5 redémarrer la base de données mysql

service mysqld restart

 mysql -u root -p

prendre plaisir :)

7
Narendra Kumar

Veuillez arrêter tous les services MySQL avec la commande suivante /etc/init.d/mysqld stop After

mysqld_safe --skip-grant-tables

sa peut fonctionner correctement

3
sumit Jaiswal

Pour moi, travaillez comme ceci: 1. Arrêtez mysql: systemctl arrêtez mysqld

  1. Définit l'option d'environnement mySQL systemctl set-environment MYSQLD_OPTS = "- skip-grant-tables"

  2. Lancez mysql en utilisant les options que vous venez de configurer

  3. Connectez-vous en tant que root mysql -u root

  4. Après la connexion, j'utilise FLUSH PRIVILEGES; Indiquez au serveur de recharger les tables de droits pour que les instructions de gestion de compte fonctionnent. Si je ne le fais pas, je reçois cette erreur en essayant de mettre à jour le mot de passe: "Impossible de trouver une ligne correspondante dans la table des utilisateurs"

1
Dragos Alexe