美文网首页php技术
THINKPHP:SQLSTATE[HY000] [1045]

THINKPHP:SQLSTATE[HY000] [1045]

作者: 仲颖ying | 来源:发表于2019-05-31 18:09 被阅读0次

原因:数据库密码不对

解决步骤:

1.在MySQL的my.ini中加入skip-grant-tables

2.cmd进入MySQL的bin目录下,

mysql -h localhost -u root -p

连接数据库,即使不输入密码也会连接

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'root';

更改密码后退出,重新连接不报错,成功

参考文献:

1.PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

使用PHP连接MySQL 8的时候,可能会发生如标题所示的错误:

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

发生这种错误,是由于MySQL 8默认使用了新的密码验证插件:caching_sha2_password,而之前的PHP版本中所带的mysqlnd无法支持这种验证。解决这个问题,有两种办法。

一种办法是升级PHP支持MySQL 8的新验证插件。

PHP 7.2.8和PHP 7.1.20已经可以支持caching_sha2_password,直接连接MySQL 8。

截止PHP 7.0.31和PHP 5.6.37还无法支持caching_sha2_password,不知道后续版本是否会做出支持。

可以通过phpinfo()函数了解当前安装的PHP是否支持caching_sha2_password:

如果不能升级PHP,可以在MySQL 8中创建(或修改)使用caching_sha2_password插件的账户,使之使用mysql_native_password,这样先前版本的PHP就可以连接使用了。

在CREATE USER时,使用IDENTIFIED WITH xxx_plugin BY ‘password‘,比如:

CREATE USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘password!2#4‘;

使用ALTER USER修改已有账户的验证插件:

ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password

ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘new_password‘;

采用前一种方式,账户的密码将被清除;BY子句将为账户设置新的密码。

/etc/my.cnf配置文件中,有一行:

# default-authentication-plugin=mysql_native_password

请删除注释符号“#”并重新启动mysqld使之生效,此后创建的账户均默认使用mysql_native_password。

如果您完成MySQL Server的安装之后,在没有启动过mysqld服务的情况下修改/etc/my.cnf配置,那么启动mysqld之后创建的‘root‘@‘localhost‘账户也是使用mysql_native_password插件的。

就这些,希望有帮助。

2.mysql Access denied for user root@localhost错误解决方法总结

问题重现(以下讨论范围仅限Windows环境):

C:\AppServ\MySQL> mysql -u root -p

Enter password:

ERROR 1045 (28000): Access denied for user

'root'@'localhost' (using password: YES)

解决方法:

编辑mysql配置文件my.ini(在mysql的安装目录下,我的在D:\Program

Files\MySQL\MySQL Server 5.0\my.ini),在[mysqld]这个条目下加入 skip-grant-tables

保存退出后重启mysql

1.点击“开始”->“运行”(快捷键Win+R)。

2.停止:输入 net stop mysql

3.启动:输入 net start mysql  

这时候在cmd里面输入mysql -u root -p就可以不用密码登录了,出现 password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为我们不能grant(没有权限)。

继续按下面的流程走:

1.进入mysql数据库:

mysql> use mysql;

Database changed

2.给root用户设置新密码:

mysql> update user set password=password("新密码") where user="root";

Query OK, 1 rows affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

3.刷新数据库

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

4.退出mysql:

mysql> quit;

Bye

改好之后,再修改一下my.ini这个文件,把我们刚才加入的 "skip-grant-tables"这行删除,保存退出再重启mysql就可以了。

相关文章

网友评论

    本文标题:THINKPHP:SQLSTATE[HY000] [1045]

    本文链接:https://www.haomeiwen.com/subject/kmbgtctx.html