MySQL - 使用者 root@localhost 的存取被拒絕

MySQL - 使用者 root@localhost 的存取被拒絕

我試圖遠端存取 MySQL,因為 MySQL 只能在本地工作。

我遵循了這個指南 http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

我在教程中使用了這樣的命令:

mysql> update user set Host='202.54.10.20' where user='root';

我認為這搞亂了本地mysql。

現在我無法登入:

$ mysql -u root -p

我收到這個錯誤:

使用者「root」@「localhost」的存取被拒絕(使用密碼:是)

現在我知道密碼是正確的,因為它以前是有效的。但我不小心把自己鎖在門外了..

我不知道該怎麼辦了。

伺服器使用的作業系統是Ubuntu。

答案1

您可以嘗試常規恢復過程:

  1. 停止MySQL服務
  2. 使用以下命令運行服務:

    sudo mysqld_safe --skip-grant-tables &
    
  3. 連線(不需要密碼):

    mysql -uroot
    
  4. 恢復您的變更(這次要小心並檢查select當前狀態,主機應該是202.54.10.20):

    use mysql;
    update user set Host='localhost' where user='root';
    flush privileges;
    
  5. 以常規方式重新啟動 MySQL

答案2

嘗試這個指令:

SHOW GRANTS FOR 'root'@'localhost';

如果您沒有適當的權限,也可能會發生這種情況。所以你甚至可以輸入以下命令:

GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;

答案3

我遇到了同樣的問題(從 virtualmin 錯誤地更新了用戶主機)並使用與 @techraf 的答案類似的步驟修復了它,但遵循此網站的類似步驟以避免can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'ubuntu 16.04 中的錯誤:

https://coderwall.com/p/j9btlg/reset-the-mysql-5-7-root-password-in-ubuntu-16-04-lts

我修改了更新主機而不是密碼的步驟:

# Stop MySQL
sudo service mysql stop
# Make MySQL service directory.
sudo mkdir /var/run/mysqld
# Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld
# Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &
# Log in without a password.
mysql -uroot mysql

然後在mysql中:

select user, host from mysql.user; --just to check
UPDATE mysql.user SET host='localhost' WHERE User='root' AND Host='202.54.10.20'; --CHANGE the host to the one you see in the query
select user, host from mysql.user; --check again 
commit;
exit;

然後在控制台中:

# Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
# Start the MySQL service normally.
sudo service mysql start

答案4

如果您在 Workbench 中收到此錯誤,請依照下列步驟操作。

首先只需使用您目前的密碼登入:

sudo mysql -u root -p

然後更改您的密碼,因為低強度密碼有時會出錯。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

然後只需退出並使用新​​密碼再次登入即可:

quit

sudo mysql -u root -p

成功登入後,輸入指令:

use mysql;

它應該會顯示一條類似「資料庫已更改」的訊息,然後鍵入:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

之後類型:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

然後輸入:

FLUSH PRIVILEGES;

然後只需退出:

quit

現在嘗試在 WORKBENCH 中使用新密碼登入。希望它能起作用。謝謝。

相關內容