我在不同的VPS上多次遇到过这个问题。我通常会找到不同的方法,但我想永久地解决这个问题。
当我尝试登录mysql时出现这些错误:
(env) lit@digitalocean:~/HowLit/init$ mysql
ERROR 1045 (28000): Access denied for user 'lit'@'localhost' (using password: NO)
(env) lit@digitalocean:~/HowLit/init$ mysql -u lit
ERROR 1045 (28000): Access denied for user 'lit'@'localhost' (using password: NO)
然后如果我尝试root:
(env) lit@digitalocean:~/HowLit/init$ mysql -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
但是,如果我这样做:
sudo mysql -u root
然后输入用户点亮的正常密码,然后就可以了。
但是我无法创建数据库或其他任何内容。 我已经多次清除并重新安装了mysql,并一遍又一遍地遇到同样的错误。
导致这些错误的原因是什么?在我的装置中我做错了什么?
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
答案 0 :(得分:1)
尝试使用此命令登录:
mysql -u root -p
或
mysql -u <your user name> -p
输入您之前为这些用户设置的密码。
如果你忽略添加-p,mysql会假设你试图在没有密码的情况下登录,如果这与mysql用户表中存储的密码不匹配,它将拒绝你登录的尝试。
登录后,请输入:show grants;
现在您已经显示了用户授权,问题是root用户的设置方式需要您使用sudo。要像使用sudo一样修复此登录,然后运行以下行。
请仔细阅读。在确保您拥有所需的任何mysql数据的备份之后(这不会删除您的数据,但保证安全起见总是好的),首先运行:
DROP USER 'root'@'localhost';
然后立即运行,而不先注销:
CREATE USER 'root'@'%' IDENTIFIED BY '<<<YOUR DESIRED PASSWORD>>>'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
您现在应该可以在没有sudo的情况下登录。对于非digitalocean机器,我宁愿将root数据库帐户限制为localhost以获得最佳安全性,但如果您选择了足够的密码,那么无论如何都应该没问题。
如果您不想在上面创建用户,也可以尝试使用以下方式登录:
mysql -u root -h localhost -p
要么
mysql -u lit -h localhost -p
(如果您在mysql中创建了一个用户点亮的@ localhost)
由于您对调试根本原因(bravo)感兴趣,您可以运行它并查看在mysql中创建了哪些其他用户。登录mysql,然后运行:
use mysql; select * from user;
将输出粘贴到禁用自动换行的文本编辑器中将使其可读。
您应该看到已创建了其他用户帐户。请注意,某些帐户可能优先于您帐户的权限,这可能会导致您的登录问题。即使密码被删除,我也不建议在线发布输出。祝你好运。