Maison  >  Article  >  base de données  >  Explication détaillée du problème du mot de passe MySQL oublié et de l'erreur de connexion

Explication détaillée du problème du mot de passe MySQL oublié et de l'erreur de connexion

黄舟
黄舟original
2017-03-27 13:26:201247parcourir

L'éditeur ci-dessous vous apportera une brève discussion sur mysqlle problème des mots de passe oubliés et des erreurs de connexion. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un oeil.

Mot de passe de connexion mysql oublié ? En fait, la solution est très simple Il vous suffit d'ajouter un "saut" de ligne au fichier de configuration principal . de mysqlmy.cnf. Sélectionnez simplement les paramètres du "Formulaire d'autorisation" !

Ajoutez la ligne suivante dans my.cnf :

[root@test-huanqiu ~]# vim /etc/my.cnf            
  //在[mysqld]区域里添加
........
skip-grant-tables 
                     
 //跳过授权表

Puis redémarrez le service mysql, et rien se produira Connexion par mot de passe

[root@test-huanqiu ~]# /etc/init.d/mysqld restart

Réinitialiser le mot de passe après la connexion

[root@test-huanqiu ~]# mysql 
mysql> select host,user,password from mysql.user;
+--------------------+------+-------------------------------------------+
| host | user | password |
+--------------------+------+-------------------------------------------+
| localhost | root | *481ACA1BD6D1E86221244904E9C0FABA33B40B84 |
| host-192-168-1-117 | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| host-192-168-1-117 | | |
+--------------------+------+-------------------------------------------+
6 rows in set (0.00 sec)
mysql> update mysql.user set password=password("123456") where host="localhost" and user="root";
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select host,user,password from mysql.user;
+--------------------+------+-------------------------------------------+
| host | user | password |
+--------------------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| host-192-168-1-117 | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| host-192-168-1-117 | | |
+--------------------+------+-------------------------------------------+
6 rows in set (0.00 sec)
mysql>

Commentez la ligne ajoutée à nouveau dans my.cnf, et puis redémarrez mysql

[root@test-huanqiu ~]# vim /etc/my.cnf........#skip-grant-tables
[root@test-huanqiu ~]# /etc/init.d/mysqld restart
[root@test-huanqiu ~]# mysql -p123456mysql>

-------------------------------- - ------------------------------------------------- - ------------------------------------

Un écueil découvert :

Mysql était entièrement sauvegardé auparavant. Après l'avoir restauré, j'ai constaté que je ne pouvais pas me connecter avec le mot de passe précédent !
Utilisez la méthode ci-dessus pour vous connecter sans mot de passe, puis réinitialisez le mot de passe. Cependant, après avoir réinitialisé le mot de passe, vous ne pouvez toujours pas vous connecter.

Enfin, il a été constaté que le contenu de la table mysql.user avait été effacé !

mysql> select host,user,password from user;
Empty set (0.00 sec)

Solution :

Insérer les données, puis réinitialiser le mot de passe

mysql> insert into user(host,user,password) values("localhost","root","123456");
Query OK, 1 row affected, 3 warnings (0.01 sec)

mysql> select host,user,password from user;
+-----------+------+----------+
| host | user | password |
+-----------+------+----------+
| localhost | root | 123456 |
+-----------+------+----------+
1 row in set (0.00 sec)

mysql> update mysql.user set password=password("123456") where host="localhost" and user="root";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into user(host,user,password) values("127.0.0.1","root","123456");
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1 | root | 123456 |
+-----------+------+-------------------------------------------+
2 rows in set (0.00 sec)

mysql> update mysql.user set password=password("123456") where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 2 Changed: 1 Warnings: 0

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------+-------------------------------------------+

Ensuite, vous pourrez vous connecter normalement en utilisant le mot de passe réinitialisé !

--------------------------------------------- -------------------------------------------------- -----------------------

erreur de connexion mysql 1 :

[root@test-huanqiu ~]# mysql -p123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
[root@test-huanqiu ~]# ps -ef|grep mysql
root 28279 1 0 12:55 ? 00:00:00 /bin/sh /usr/local/mysql//bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/data/mysql.pid
mysql 29059 28279 0 12:55 ? 00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql/ --datadir=/data/mysql/data
 --plugin-dir=/usr/local/mysql//lib/plugin --user=mysql --log-error=/data/mysql/data/mysql-error.log --pid-file=/data/mysql/data/mysql.pid 
 --socket=/usr/local/mysql/var/mysql.sock --port=3306
root 30726 11268 0 12:58 pts/2 00:00:00 grep mysql

On peut voir que le chemin actuel du fichier mysql.sock est /usr/local/mysql/var/mysql.sock,

Solution : Créer un lien logiciel

[root@test-huanqiu ~]# ll /usr/local/mysql/var/mysql.sock
rwxrwxrwx. 1 mysql mysql 0 Nov 29 12:55 /usr/local/mysql/var/mysql.sock
[root@test-huanqiu ~]# rm -f /var/lib/mysql/mysql.sock
[root@test-huanqiu ~]# ln -s /usr/local/mysql/var/mysql.sock /var/lib/mysql/mysql.sock

De cette façon, tout va bien

[root@test-huanqiu ~]# mysql -p123456
mysql>

--------------- -- ------------------------------------------------ -- ----------------------------------

Démarrer MySQL Erreur signalée :

Starting MySQL.... ERROR! The server quit without updating PID file (/data/mysql/data/mysql.pid).

Solutions tentées :

(1) Problème d'autorisation

Il se peut que le fichier mysql.pid ne dispose pas d'autorisations d'écriture. Définissez les autorisations du répertoire d'installation de MySQL sur les autorisations de l'utilisateur de démarrage de MySQL. Par exemple, remplacez-le par mysql : autorisations mysql

(2) Le processus Mysql existe peut-être déjà dans le processus

ps -ef|grep mysql pour savoir s'il existe est un processus MySQL. Tuez-le simplement et essayez de redémarrer MySQL

(3) Il se peut que MySQL ait été installé plusieurs fois sur la machine et qu'il y ait des données résiduelles qui affectent le démarrage du service.

Allez dans le répertoire de données mysql et jetez un œil si mysql-bin.index existe, supprimez-le immédiatement. C'est le coupable !

(4) Mysql utilisera le fichier de configuration /etc/my.cnf au démarrage sans spécifier de fichier de configuration. Veuillez ouvrir ce fichier pour voir s'il existe un répertoire de données spécifié sous le [. mysqld].

Ajouter des paramètres sous [mysqld], tels que datadir = /data/mysql/data

(5) problème de champ fédéré ignoré

Vérifiez s'il existe un champ fédéré ignoré non commenté dans le fichier my.cnf, et si c'est le cas, commentez-le immédiatement.

(6) Le répertoire du journal des erreurs n'existe pas

Allez dans le fichier my.cnf pour voir s'il existe un chemin de configuration du journal. Si c'est le cas, vérifiez si. le répertoire de journal existe. Journal Les autorisations du répertoire doivent être les autorisations de l'utilisateur de démarrage MySQL.

(7) Selinux est la cause du problème S'il s'agit d'un système centos, selinux sera activé par défaut

Fermez-le, ouvrez /etc/selinux/. config et définissez SELINUX=enforcing. Changez-le en SELINUX=disabled, enregistrez et quittez, puis essayez de redémarrer la machine.
(8) Essayez de réinitialiser les données mysql

Basculez vers le répertoire d'installation mysql

. /mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql

—————————————— ———— ----------------------

Utilisez le mysql informations autorisées du serveur pour se connecter à mysql, l'erreur est signalée comme suit :

ERREUR 2003 (HY000) : Impossible de se connecter au serveur MySQL sur '192.168 .1.14' (111)

Les raisons possibles sont :

1) Il peut y avoir un problème de connexion réseau à distance 192.168. .1.14 peut envoyer un ping avec succès. Cela exclut la situation

.

2) Les iptables du serveur mysql 192.168.1.14 ont des restrictions sur la liste blanche sur les connexions du port 3306 ;

3) Le fichier my.cnf du serveur mysql 192.168.1.14 a configuré la liaison d'adresse bind_address, la connexion locale n'est pas autorisée ;

4) skip_networking est configuré dans le fichier my.cnf du serveur mysql 192.168.1.14, qui utilise MySQL et ne peut se connecter que via le Socket local (connexion socket C'est également la méthode par défaut de connexion locale), abandonnez la surveillance de TCP/IP

5) Résolvez les problèmes de résolution DNS, vérifiez le fichier my.cnf du serveur mysql 192.168.1.14 Si skip_name_resolve y est défini. Une fois ce paramètre ajouté, la méthode de connexion par nom d'hôte n'est plus prise en charge.

6) Résolvez le problème --port Il est possible que le port MySQL de 192.168.1.14 sur le serveur mysql ne soit pas le 3306 par défaut, comme le port 3307. De cette façon, -- port= doit être ajouté lors de la connexion à distance. 3307

7) Résoudre les problèmes d'utilisateur et de mot de passe En fait, 111 n'apparaîtra pas pour les erreurs d'utilisateur et de mot de passe, donc les problèmes de mot de passe utilisateur sont éliminés
ERROR. 1045 (28000) : Accès refusé pour l'utilisateur 'root'@'XXXX' (en utilisant le mot de passe : OUI)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn