我試圖遠端存取 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
您可以嘗試常規恢復過程:
- 停止MySQL服務
使用以下命令運行服務:
sudo mysqld_safe --skip-grant-tables &
連線(不需要密碼):
mysql -uroot
恢復您的變更(這次要小心並檢查
select
當前狀態,主機應該是202.54.10.20
):use mysql; update user set Host='localhost' where user='root'; flush privileges;
以常規方式重新啟動 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 中使用新密碼登入。希望它能起作用。謝謝。