我试图授予 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。希望它能起作用。谢谢。