1. 程式人生 > >PHP錯誤:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

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

升級 文件中 sta 否支持 sha2 authent lte 子句 bubuko

使用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插件的。

就這些,希望有幫助。

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