MySQL版本
在阿里云上根据手动部署LNMP环境(Alibaba Cloud Linux 2)中提示的步骤一步步安装的。
安装的MySQL版本是
mysqld Ver 5.7.33 for Linux on x86_64 (MySQL Community Server (GPL))
问题描述
根据手动部署LNMP环境(Alibaba Cloud Linux 2)一步步进行到“步骤六:配置MySQL”的时候,他采用的方法是先使用
grep 'temporary password' /var/log/mysqld.log
命令获取临时登陆密码,然后使用
mysql_secure_installation
命令配置MySQL安全性的方式来进行登陆的。
按照教程的操作,成功获取了temporary password临时密码,然而这个临时密码在mysql_secure_installation的时候根本登不进去。一直报错:
Error: Access denied for user 'root'@'localhost' (using password: YES)
使用
mysql -uroot -p
登陆MySQL,输入临时密码,同样得到报错,这次的报错是:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决方法
在网上找了很多方法,基本思路都是按照如下步骤解决:
- 通过
vi /etc/my.cnf
进入my.cnf配置文件; - 在[mysqld]底下,加入一行
skip-grant-tables
,以跳过安全验证; -
systemctl restart mysqld
重启MySQL; -
mysql -uroot -p
登陆MySQL,输入任意密码进入; - 输入
use mysql;
进入名为mysql的数据库; - 输入
UPDATE user SET password=PASSWORD("你自己的密码") WHERE user='root';
进行密码修改; - 输入
quit;
退出MySQL; - 重复步骤1;
- 删除刚才加入到[mysqld]下面的
skip-grant-tables
,退出vim,重启MySQL; -
mysql -uroot -p
输入刚才设置的新密码,登陆MySQL。
然而这个办法尝试了多次,都是在步骤6进行完以后报错
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
都快疯了!!!!
偶然的机会,找到了CSDN上一篇点赞量很少的文章,提到
原来是MySQL5.7的mysql数据库下已经没有password这个字段了,password字段改成了
authentication_string
有句妈卖批特别想喊出来!!!!
按照这篇文章的说法,将步骤6中的命令改成了:
update mysql.user set authentication_string=password('HJZ@bb1314') where user='root';
重新操作一遍。一下子就成功了!
PS
后面用新修改的密码登陆MySQL的时候,可以登陆,但进行一些操作的时候,有如下warning:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
意思是说,你刚才修改的新密码其实是一个初始密码,这里还要求你要换个密码才能继续登陆。
这就跟手动部署LNMP环境(Alibaba Cloud Linux 2)“步骤六:配置MySQL”接上了。后面的按照文档要求,继续mysql_secure_installation
命令即可。
血和泪的教训
在查找解决问题的办法时,一定要注意软件版本的问题。不同版本的软件,对应的字段名称、操作命令很有可能是不同的,所以百度的时候,尽量加上软件版本号;
查百度的时候,最好有针对性的查报错信息。这样得到的答案是最有针对性的。