SQLSTATE[HY000] [1698]

5

我该如何解决这个错误?

错误:SQLSTATE[HY000] [1698] 拒绝访问用户'root'@'localhost'(SQL:select count(*) as aggregate from users where email= email@gmail.com)

我正在使用Ubuntu操作系统

请帮忙解决


1
错误提示为访问被拒绝:您是否使用正确的密码连接,以及是否有访问此数据库的权限? - ᴄʀᴏᴢᴇᴛ
我使用了正确的用户名,即roor。然后我没有密码。 - jonahgeek
1
有时候,禁用了没有密码的root登录。你可能需要设置一个root密码。在这里看一下:https://dev.mysql.com/doc/refman/8.0/en/default-privileges.html - ᴄʀᴏᴢᴇᴛ
以root身份登录并不是一个好主意,也不应该用于一般操作。您应该在MySQL中创建一个用户,该用户具有应用程序所需的最低权限。 - GordonM
确保在编辑 Laravel 应用程序中的 *.env 文件后,运行 php artisan config:clearphp artisan cache:clear 来将配置文件重置为新值。 - stanley mbote
显示剩余2条评论
4个回答

16

首先以root身份登录:

$ sudo mysql -u root

然后创建或更改非root用户(如果需要,请使用'127.0.0.1'代替'localhost'):

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'adminspassword';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;

退出并重新启动:

exit
$sudo service mysql restart
$sudo service apache2 restart

并编辑 .env 文件:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3630
DB_DATABASE=yourdbname
DB_USERNAME=admin
DB_PASSWORD=adminspassword

1
在尝试了许多不同的解决方案后,这个似乎对我有用。 - hackernewbie

3

MySQL会区分“localhost”和“127.0.0.1”。可能出现 'root'@'localhost' 不允许登录的情况,因为用户表中有一条记录只允许从 127.0.0.1 登录 root。

这也可以解释为什么服务器上的某些应用程序可以连接到数据库,而有些应用程序不能连接,因为连接到数据库的方式不同。您当前不允许通过“localhost”进行连接。


1

我知道现在时间有点晚了,但是我一直在寻找答案,却找不到任何东西,最终得到了这个答案。

$sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q

现在你应该能够以root身份登录。 感谢this帖子中的@Matematikisto


0
我在MySQL 8、Ubuntu 20中遇到了这个问题。默认情况下,该策略不授予"GRANT"权限,包括root,但即使进行了操作以获取这些权限,在为帐户授予mysql_native_password权限之后,应用程序也只能获得访问权限。也许这会对某人有所帮助:
UPDATE mysql.user SET authentication_string=CONCAT('*', UPPER(SHA1(UNHEX(SHA1('password'))))), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';

修改密码及其格式的完整步骤在此处: MySQL:如何重置或更改MySQL root密码?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接