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

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

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

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

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

PHP 7.2.8和PHP 7.1.20已经能够支持caching_sha2_password,直接链接MySQL 8。sql

截止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就能够链接使用了。
  1. 在CREATE USER时,使用IDENTIFIED WITH xxx_plugin BY ‘password‘,好比:
    CREATE USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password BY ‘password!2#4‘;
  2. 使用ALTER USER修改已有帐户的验证插件:
    ALTER USER ‘native‘@‘localhost‘ IDENTIFIED WITH mysql_native_password

    server

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

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

  3. /etc/my.cnf配置文件中,有一行:
    # default-authentication-plugin=mysql_native_password

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

  4. 若是您完成MySQL Server的安装以后,在没有启动过mysqld服务的状况下修改/etc/my.cnf配置,那么启动mysqld以后建立的‘root‘@‘localhost‘帐户也是使用mysql_native_password插件的。
相关文章
相关标签/搜索