Penyelesaian kepada masalah bahawa jadual pengguna mysql hilang: 1. Tambahkan "skip-grant-tables" ke "[mysqld]" 2. Edit fail konfigurasi my.cnf dan tambah "sql_mode=NO_ENGINE_SUBSTITUTION"; "; 3. , Mulakan semula perkhidmatan mysql.
Persekitaran pengendalian artikel ini: sistem Windows 7, mysql versi 5.5, komputer Dell G3.
Apakah yang perlu saya lakukan jika jadual pengguna mysql hilang?
mysql Terlupa kata laluan, set semula kata laluan, penyelesaian kepada jadual pengguna mysql kosong:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Ubah suai fail konfigurasi mysql my.cnf:
vim /etc/my.cnf
Tambah
skip-grant-tables
dalam [mysqld] untuk memulakan semula perkhidmatan mysql, log masuk terus dengan kata laluan kosong , tanya jadual pengguna, dan dapatkan hasil Kemudian ubah suai mengikut langkah berikut Jika hasilnya kosong, penyelesaian terakhir ialah
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)
Ubah suai kata laluan pengguna yang sepadan
# 重置密码为 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
Batalkan atau ulas pilihan langkau yang ditambahkan dalam fail konfigurasi my.cnf -grant-tables, mulakan semula perkhidmatan mysql dan panggilnya sehari.
mysql> select Host,User,authentication_string from mysql.user; Empty set (0.00 sec) # 退出登陆 mysql> exit Bye
Edit fail konfigurasi my.cnf dan tambah atau ubah suai dua item berikut (saya tidak' t mempunyai item sql_mode):
sql_mode=NO_ENGINE_SUBSTITUTION skip-grant-tables
Masukkan data pengguna Root
mysql> insert into mysql.user(Host,User,authentication_string) values("%","root",password("123456")); Query OK, 1 row affected, 4 warnings (0.00 sec)
Tanya jadual mysql.user sekali lagi dan ralat akan dilaporkan
mysql> select Host,User,authentication_string from mysql.user; ERROR 1194 (HY000): Table 'user' is marked as crashed and should be repaired
Perlu untuk membaiki jadual 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)
Ubah suai kebenaran pengguna 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
Mulakan perkhidmatan mysql: systemctl start mysql
Masalah selesai!
Pembelajaran yang disyorkan: "tutorial video mysql"
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika jadual pengguna mysql hilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!