Maison >base de données >tutoriel mysql >Que dois-je faire si la table utilisateur MySQL a disparu ?

Que dois-je faire si la table utilisateur MySQL a disparu ?

藏色散人
藏色散人original
2021-12-28 10:00:066983parcourir

Solution au problème de disparition de la table utilisateur MySQL : 1. Ajoutez "skip-grant-tables" à "[mysqld]" ; 2. Modifiez le fichier de configuration my.cnf et ajoutez "sql_mode=NO_ENGINE_SUBSTITUTION" ; Redémarrez le service MySQL.

Que dois-je faire si la table utilisateur MySQL a disparu ?

L'environnement d'exploitation de cet article : système Windows 7, mysql version 5.5, ordinateur Dell G3.

Que dois-je faire si la table utilisateur MySQL a disparu ?

mysql Mot de passe oublié, réinitialisez le mot de passe, la solution à la table mysql.user est vide :

1 Il y a un utilisateur dans la table user, changez le mot de passe directement

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Modifiez le fichier de configuration mysql my. cnf :

vim /etc/my.cnf

Dans [mysqld ] Ajoutez

skip-grant-tables

Redémarrez le service mysql, connectez-vous directement avec un mot de passe vide, interrogez la table user, s'il y a des résultats, suivez les étapes ci-dessous pour modifier, si les résultats sont vides, directement la solution finale

mysql> select Host,User,authentication_string from mysql.user;
+-----------+---------------+-------------------------------------------+
| Host      | User          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          | *6A7A490FB9DC8C33C2B025A91737077A7E9CC5E5 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| %         | root          | *6A7A490FB9DC8C33C2B025A91737077A7E9CC5E5 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.00 sec)

Changer le mot de passe de l'utilisateur correspondant

# 重置密码为 123456
mysql> update mysql.user set authentication_string=password('123456') where user='root' 
Query OK, 2 rows affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 1

# 刷新权限,使配置生效
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 退出
mysql> quit
Bye

Annuler ou commenter Supprimez l'option skip-grant-tables ajoutée au fichier de configuration my.cnf, redémarrez le service mysql et arrêtez-le.

2. Si la table utilisateur n'a pas de données, vous devez insérer les données utilisateur

mysql> select Host,User,authentication_string from mysql.user;
Empty set (0.00 sec)
# 退出登陆
mysql> exit
Bye

Modifiez le fichier de configuration my.cnf, ajoutez ou modifiez les deux éléments suivants (je n'ai pas l'élément sql_mode) :

sql_mode=NO_ENGINE_SUBSTITUTION
skip-grant-tables
  • Arrêtez le service mysql et démarrez le mode de sécurité de la base de données : mysqld_safe &
  • Utilisez un mot de passe root vide pour vous connecter à la base de données : mysql -uroot -p

Insérez les données de l'utilisateur root

mysql> insert into mysql.user(Host,User,authentication_string) values("%","root",password("123456")); 
Query OK, 1 row affected, 4 warnings (0.00 sec)

Interrogez à nouveau la table mysql.user, et une erreur sera signalée

mysql> select Host,User,authentication_string from mysql.user;
ERROR 1194 (HY000): Table 'user' is marked as crashed and should be repaired

Besoin de réparer la table mysql.user

mysql> REPAIR TABLE mysql.user;
+------------+--------+----------+-------------------------------------------------+
| Table      | Op     | Msg_type | Msg_text                                        |
+------------+--------+----------+-------------------------------------------------+
| mysql.user | repair | info     | Wrong bytesec: 113-108- 95 at 396; Skipped      |
| mysql.user | repair | info     | Found block that points outside data file at 32 |
| mysql.user | repair | info     | Found block that points outside data file at 36 |
| mysql.user | repair | info     | Found block that points outside data file at 40 |
| mysql.user | repair | info     | Found block that points outside data file at 44 |
| mysql.user | repair | info     | Found block that points outside data file at 48 |
| mysql.user | repair | info     | Found block that points outside data file at 52 |
| mysql.user | repair | info     | Found block that points outside data file at 56 |
| mysql.user | repair | info     | Found block that points outside data file at 60 |
| mysql.user | repair | warning  | Number of rows changed from 4 to 3              |
| mysql.user | repair | status   | OK                                              |
+------------+--------+----------+-------------------------------------------------+
11 rows in set (0.64 sec)

# 再次查询user表
mysql> select Host,User,authentication_string from mysql.user;
+-----------+---------------+-------------------------------------------+
| Host      | User          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| %         | root          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)

Modifier les autorisations de l'utilisateur root :

  update mysql.user set
     `Select_priv` = 'Y',
   `Insert_priv` = 'Y',
   `Update_priv` = 'Y',
   `Delete_priv` = 'Y',
   `Create_priv` = 'Y',
   `Drop_priv` = 'Y',
   `Reload_priv` = 'Y',
   `Shutdown_priv` = 'Y',
   `Process_priv` = 'Y',
   `File_priv` = 'Y',
   `Grant_priv` = 'Y',
   `References_priv` = 'Y',
   `Index_priv` = 'Y',
   `Alter_priv` = 'Y',
   `Show_db_priv` = 'Y',
   `Super_priv` = 'Y',
   `Create_tmp_table_priv` = 'Y',
   `Lock_tables_priv` = 'Y',
   `Execute_priv` = 'Y',
   `Repl_slave_priv` = 'Y',
   `Repl_client_priv` = 'Y',
   `Create_view_priv` = 'Y',
   `Show_view_priv` = 'Y',
   `Create_routine_priv` = 'Y',
   `Alter_routine_priv` = 'Y',
   `Create_user_priv` = 'Y',
   `Event_priv` = 'Y',
   `Trigger_priv` = 'Y',
   `Create_tablespace_priv` = 'Y'
   where user='root';
# 更新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 退出登陆
mysql> exit
Bye
  • Quittez mysql et restaurez les modifications du fichier de configuration my.cnf
  • Terminez le processus mysqld_safe : pkill mysql
  • Démarrez le service mysql : systemctl start mysql
    Problème résolu !

Apprentissage recommandé : "tutoriel vidéo mysql"

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