1. 程式人生 > 其它 >Mysql localhost 無法登入 root使用者的處理過程

Mysql localhost 無法登入 root使用者的處理過程

問題說明:


  • 前段時間同事修改密碼, 但是發現修改了密碼之後,外面可以連線root使用者, 但是本地無法連線了. 懷疑是密碼修改存在問題,需要重新進行處理
  • 這裡進行簡單的描述.

問題現象

  • 使用 mysql -uroot -p 輸入給的密碼之後提示無法登入
[root@centos7ver2009 ~]# mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

懷疑是密碼改錯了, localhst和% 的密碼設定的不一致導致的.

  • 使用 navicat進行連線, 然後嘗試進行密碼修改提示資訊為:
SELECT command denied to user 'root'@'192.168.1.53' for table 'user'

所以總結一下問題原因:

1. 密碼修改成功了, 但是 localhost的使用者 的使用者密碼修改的不對, 自己也記不住了. 
2. % 的賬戶密碼修改正確 但是把部分許可權搞沒了, 需要進行處理. 

問題解決

  • 因為資料庫是 mysql8 的環境, 跟之前的一些環境不太一樣, 所以這裡需要總結一下.
1. 修改 /etc/my.conf 
增加 skip-grant-tables
注意修改完之後需要重啟mysql
systemctl restart mysqld
2. 這樣修改之後外面的連線無法連線, 僅能夠在本地進行連線. 
mysql -uroot
3. 注意 使用了skip-grant-tables的許可權就沒法使用 alter identified 的密碼了.
找了一下可以使用如下命令修改密碼
UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';
將密碼設定為空. 
4. 註釋掉步驟1 裡面的 skip 指令 繼續重啟mysql資料庫
5. 使用空密碼登入mysql
mysql -u root
6. 修改資料庫密碼
alter user 'root'@'%' identified by '別再忘記了';
alter user 'root'@'localhost' identified by '別再忘記了';
flush privileges;
7. 再次退出,驗證可以使用正常密碼登入了. 
8. 還要解決 外面機器無法進行select 的問題
找一個別的機器 建立成insert 語句 過來在 mysql的命令列裡面直接執行. 
INSERT INTO `mysql`.`user`(`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`, `Create_role_priv`, `Drop_role_priv`, `Password_reuse_history`, `Password_reuse_time`, `Password_require_current`, `User_attributes`) VALUES ('%', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*23234234', 'N', '2021-06-11 10:55:31', NULL, 'N', 'Y', 'Y', NULL, NULL, NULL, NULL);
9. 注意我兩個使用者的密碼是一樣的, 所以比較省事, 不然還得再改一遍. 有密文密碼 我給加了處理,不要直接使用.
10. 使用 navicat 可以進行連線.