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插件的。
相關文章
相關標籤/搜索