PHP 7.2.8 PDO 無法連接到 AWS EC2 LEMP 堆棧中的 MySQL 8.0.12 (GA)
我正在測試使用 Ubuntu Server 18.04 LTS、NGINX 1.14、PHP 7.2.8 和 MySQL 8.0.12 建構的新 LEMP 網路伺服器。它是一個使用官方 Canonical AMI 的 AWS EC2 實例。除了數據庫連接之外,Web 和 PHP 按預期工作。但是我無法使用在其他情況下執行良好的 PDO 設置和函式連接到 MySQL 數據庫(MySQL 5.7 通過 PHP 7.1)。
我可以使用與 PDO 嘗試使用的憑據相同的憑據在終端中的伺服器(通過 SSH 的 MySQL)上可靠地連接。還可以使用 MySQL Workbench 和相同的憑據從遠端可靠地進行。沒有伺服器上的防火牆。防火牆僅通過亞馬遜的安全組。在埠 3306 完全打開的情況下,PHP 仍然無法使用 PDO 進行連接。尚未嘗試使用 MySQLi,但這樣做的一個目的是確定並記錄如何在此環境中通過 PDO 進行連接。所以這不是一個解決方案。
我了解 MySQL 8 更改了密碼安全性(並且我選擇在安裝過程中使用新的更強的預設密碼)。但我也從http://php.net/manual/en/ref.pdo-mysql.php得到的印像是,從 PHP 7.2.4 開始,這應該可以工作……我真的不明白他們在嘗試什麼在那裡的相關段落中說……
預計這還不行嗎?
**編輯:**刪除了結果不相關的配置和故障排除資訊。希望這個問題的更簡潔/更短的編輯對以後找到它的人更有用。
進一步的調查讓我們了解到 PHP 還不支持caching_sha2_authentication,mysql 必須恢復為原生。
**注意:**不能簡單地創建帳戶
WITH mysql_native_password
,而必須將預設設置為 mysql_native_password。**編輯:**刪除與問題無關的資訊。
您連結到的 PHP 文件頁面上的文本是:
MySQL 8
當執行 7.1.16 之前的 PHP 版本或 7.2.4 之前的 PHP 7.2 時,請將 MySQL 8 Server 的預設密碼外掛設置為mysql_native_password否則您將看到類似於*The server requested authentication method unknown to the client$$ caching_sha2_password $$*即使未使用 cache_sha2_password 。
這是因為 MySQL 8 預設使用caching_sha2_password,這是一個舊 PHP (mysqlnd) 版本無法辨識的外掛。相反,通過在 my.cnf 中設置*default_authentication_plugin=mysql_native_password來更改它。未來的PHP 版本將支持caching_sha2_password外掛。*與此同時,mysql_xdevapi擴展確實支持它。
這並不意味著 PHP 目前支持caching_sha2_password。它不是。這意味著 PHP 在連接到宣傳支持 caching_sha2_password 的 MySQL 8.0 伺服器時不再拋出致命錯誤。
如果您願意,您可以安裝命名的 PECL 擴展,但它具有與 mysqlnd 不同的 API,因此它不是直接替代品,並且不能與使用 mysqlnd API 的現有 PHP 程式碼一起使用。
目前,在發布實際支持使用caching_sha2_password 進行身份驗證的新版本PHP mysqlnd 之前,您唯一的選擇是不使用它,回到文件中的mysql_native_password。