解决MySQL错误ERROR 1045 (28000) ......

解决MySQL错误ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)

问题产生

使用腾讯云服务器Tomcat+MySQL集成镜像,安装后系统未提示我输入MySQL数据库密码(/吐血),我随便试了几个看起来可能像默认密码的密码,也没有进去(/血崩)。并报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解决方法

MySQL安装时默认的用户是root,这里的root是指数据库的用户,root密码一般在初始化MySQL时存放在你的日志文件中,日志文件的存放路径可以通过my.cnf文件进行自定义。

使用如下方法可解决

1.停止mysql数据库

/etc/init.d/mysqld stop

2.执行如下命令

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

3.使用root登录mysql数据库

mysql -u root mysql

4.更新root密码

# 写法一
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

# 写法二
#最新版MySQL请采用如下SQL:
mysql> UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';

(优先)如果采用以上写法一和写法二修改密码后,依然会提示密码不正确,你可以试一下以下写法。

原因呢?就是一个用户名为空的账户,mysql会先匹配它,然后就一直提示你密码错误,删掉这个匿名用户或者把所有的空账户设置为有密码的。

后经多次测试,最科学的语句写法如下

# 写法三
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='root' or host='localhost';//把空的用户密码都修改成非空的密码

5.刷新权限

mysql> FLUSH PRIVILEGES;

6.退出mysql

mysql> quit

7.重启mysql

/etc/init.d/mysqld restart

8.使用root用户重新登录mysql

mysql -uroot -p 
Enter password: <输入新设的密码newpassword>

PS:如果出现mysqld_safe: command not found报错,请参考此文 https://segmentfault.com/a/1190000013591737

参考链接 https://zhidao.baidu.com/question/1603863845338636507.html