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!
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
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)
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
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/
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.
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 :)
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
Pour moi, travaillez comme ceci: 1. Arrêtez mysql: systemctl arrêtez mysqld
Définit l'option d'environnement mySQL systemctl set-environment MYSQLD_OPTS = "- skip-grant-tables"
Lancez mysql en utilisant les options que vous venez de configurer
Connectez-vous en tant que root mysql -u root
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"