在ubuntu22.04里网站源码连不上mysql数据库。后来找到了原因。
连不上的时候有报错信息:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
用在网上搜索该报错信息,找到了两篇有用的文章,用这两篇文章里的处理方法解决了问题。
1、查看root用户登录验证方式。
1.1、在命令行界面登录mysql
sudo mysql -uroot -p
然后输入密码,登录成功。
1.2、查看root用户登录验证方式
use mysql;
SELECT host,user,authentication_string,plugin FROM mysql.user;
这时看到root用户登录验证方式(plugin)是:auth_socket 。登录主机(host)是:localhost。该登陆方式为证书登录,但是源码使用的是密码登录。因此需要修改成其他方式。
2、修改root用户登录验证方式。
如下两种方式,都是可行的。任选一种就可以。其中you_password用你实际使用的密码代替。
2.1、缓存 SHA-2 验证
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'you_password';
2.2、使用密码验证
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'you_password';
3、更新登录验证方式
FLUSH PRIVILEGES;
4、重复第一步中的1.2步,确认root登录验证方式已修改。
5、退出mysql。
按<Ctrl>+D,退出MySQL。
这样处理以后就能正常连接mysql数据库了。
下面是一张网站截屏图片。
参考文章:
如何修复 mysqli_real_connect(): (HY000/1698): Access denied for user ‘root’@‘localhost’ 错误?_mysql_weixin_0010034-MySQL数据库