>  기사  >  데이터 베이스  >  mysql 사용자 테이블이 사라진 경우 어떻게 해야 합니까?

mysql 사용자 테이블이 사라진 경우 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2021-12-28 10:00:066890검색

mysql 사용자 테이블이 사라진 문제에 대한 해결 방법: 1. "[mysqld]"에 "skip-grant-tables"를 추가합니다. 2. my.cnf 구성 파일을 편집하고 "sql_mode=NO_ENGINE_SUBSTITUTION"을 추가합니다. mysql 서비스를 다시 시작합니다.

mysql 사용자 테이블이 사라진 경우 어떻게 해야 합니까?

이 기사의 운영 환경: Windows 7 시스템, mysql 버전 5.5, Dell G3 컴퓨터.

mysql 사용자 테이블이 사라지면 어떻게 해야 하나요?

mysql 비밀번호를 잊어버렸습니다. 비밀번호를 재설정하세요. mysql.user 테이블에 대한 솔루션이 비어 있습니다.

1. user 테이블에 사용자가 있습니다. 비밀번호를 직접 변경하세요.

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

mysql 구성 파일 mysql을 수정하세요. cnf:

vim /etc/my.cnf

In [mysqld ] 추가

skip-grant-tables

mysql 서비스 다시 시작, 빈 비밀번호로 직접 로그인, 사용자 테이블 쿼리, 결과가 있으면 아래 단계에 따라 수정, 결과가 비어 있으면 직접 수정 최종 해결

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)

해당 사용자의 비밀번호를 변경하세요

# 重置密码为 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

취소 또는 댓글 my.cnf 구성 파일에 추가된 Skip-grant-tables 옵션을 제거하고 mysql 서비스를 다시 시작한 후 하루 호출하세요.

2. 사용자 테이블에 데이터가 없으면 사용자 데이터를 삽입해야 합니다.

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

my.cnf 구성 파일을 편집하고 다음 두 항목을 추가하거나 수정합니다(sql_mode 항목이 없습니다):

sql_mode=NO_ENGINE_SUBSTITUTION
skip-grant-tables
  • mysql 서비스를 중지하고 데이터베이스 보안 모드를 시작하세요. mysqld_safe &
  • 빈 루트 비밀번호를 사용하여 데이터베이스에 연결하세요: mysql -uroot -p

루트 사용자 데이터 삽입

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

mysql.user 테이블을 다시 쿼리하세요. 오류가 보고됩니다

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

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)

루트 사용자의 권한 수정:

  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
  • mysql을 종료하고 my.cnf 구성 파일에 대한 수정 사항을 복원
  • mysqld_safe 프로세스 종료: pkill mysql
  • mysql 서비스 시작: systemctl start mysql
    문제가 해결되었습니다!

추천 학습: "mysql 비디오 튜토리얼"

위 내용은 mysql 사용자 테이블이 사라진 경우 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.