通过宝塔面板快速安装了mysql8,然后到了要登陆mysql的时候想起来不知道密码,这时候就要强制重置mysql密码了。
- 修改/etc/my.cnf中的mysql配置,添加一句话来跳过密码验证
- 然后重启mysql服务
service mysqld restart
- 重新登陆mysql,
mysql -uroot -p
,弹出输出密码直接回车就可以 - 选择mysql数据库,
use mysql
- 修改user表中root用户的密码:
update user set password=password('123456') where user='root';
提示语法错误,百度了一下是因为password字段改成了authentication_string
然后我就输出update user set authentication_string=password('123456') where user='root';
结果还是提示语法错误,然后我就查了一下user表select user,authentication_string from user
,发现是有结果的
说明上边那句话出错的只能是我不知道用来干啥的password()这个函数了,然后我就把这个去掉了
update user set authentication_string='123456' where user='root';
然后就执行通过了。 - 刷新权限:
flush privileges
- 把/etc/my.cnf中刚才添加那句放删掉
- 重启mysql服务
- 再次登陆,使用刚才修改的123456密码发现是不正确的。
- 再次百度,发现password()这个函数在mysql8后用不了了,然后user表中存储的authentication_string字段中的密码也都是经过转化的,所以直接改成123456是不可以行的,还找到了123456转化对应的值:【*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9】,把密码设置成这样就可以用123456登陆了
update user set authentication_string='*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' where user='root';
现在在服务器上可以登陆mysql了,然后我用navicat连接又出现了新的问题
报错:1130-host ... is not allowed to connect to this MySql server
是因为root用户没有远程登陆的权限。
接下来修改mysql为中的user中root用户对应的host字段,将其改为通配符%即可
user mysql; update user set host='%' where user='root'; flush privileges;
这样navicat就可以成功连接了。