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。希望它能起作用。谢谢。

相关内容