zoukankan      html  css  js  c++  java
  • 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就可以连接使用了。
    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

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

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

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

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

    4. 如果您完成MySQL Server的安装之后,在没有启动过mysqld服务的情况下修改/etc/my.cnf配置,那么启动mysqld之后创建的‘root‘@‘localhost‘账户也是使用mysql_native_password插件的。
  • 相关阅读:
    hdu5834 Magic boy Bi Luo with his excited tree 【树形dp】
    POJ2152 Fire 【树形dp】
    POJ1848 Tree 【树形dp】
    hdu3586 Information Disturbing 【树形dp】
    BZOJ4557 [JLoi2016]侦察守卫 【树形dp】
    BZOJ4000 [TJOI2015]棋盘 【状压dp + 矩阵优化】
    BZOJ1487 [HNOI2009]无归岛 【仙人掌dp】
    BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】
    洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
    3-3 银行业务队列简单模拟
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/12850498.html
Copyright © 2011-2022 走看看