MySQL 8.4(最新的 LTS)中引入的主要更改之一 截至 2024 年發布)的問題是“MySQL 本機密碼”插件沒有 默認啟用時間更長。此外,MySQL 9.0刪除了這個插件 完全。
此更改會影響 PHP 和其他使用 MySQL 數據庫和 mysql_native_password 身份驗證插件的應用程序。由於默認情況下不再加載 mysql_native_password 插件或根本不可用,PHP PDO/MySQLi 連接失敗。
嚐試使用不再加載的 mysql_native_password 插件連接到數據庫時,PDO/MySQLi 拋出異常返回的錯誤MySQL:
PDO:
SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded
MySQLi:
mysqli_sql_exception Plugin 'mysql_native_password' is not loaded.
在 MySQL 8.0.34 到 8.3 上,使用 mysql_native_password 插件會導致MySQL 錯誤中記錄的警告log:
[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
MySQL 8.4 進行了更改,不再加載 mysql_native_password 插件,這導致了上麵顯示的錯誤。在 MySQL 9.0 上,mysql_native_password 插件被完全刪除,這也會導致相同的錯誤。
PHP 從 PHP 7.4 開始支持 caching_sha2_password 身份驗證。要修複此錯誤,請將 MySQL 用戶的身份驗證插件更改為 caching_sha2_password。
在 MySQL 控製台上,運行以下命令以列出使用已棄用的身份驗證插件的用戶:
SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
運行上述命令應列出所有使用mysql_native_password 插件:
在具有足夠權限的 MySQL 控製台上,使用 mysql_native_password 插件對每個用戶運行以下命令:
ALTER USER ''@'' IDENTIFIED WITH caching_sha2_password BY '';
之後身份驗證插件更新後,PHP 和其他應用程序將能夠通過 caching_sha2_password 插件連接到數據庫。
雖然 MySQL 8.4 不再啟用 mysql_native_password 插件默認情況下,仍然可以啟用此插件。除非 PHP 應用程序運行 PHP 7.3 或更早版本,否則不建議這樣做,因為它無法使用 caching_sha2_password 插件。
要啟用 mysql_native_password 插件,請將以下內容添加到MySQL 配置文件並重新啟動 MySQL 服務器服務。
在基於 Debian/Ubuntu 的係統上,此文件位於 /etc/mysql/目錄。建議為此創建一個新文件(例如,名為 /etc/mysql/conf.d/enable-mysql-native-password.cnf)。
SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded
請注意,mysql_native_password 插件是刪除於 MySQL 9.0,所以添加上麵的配置不起作用,可以 導致配置錯誤,因為 mysql_native_password 配置在 MySQL 9.0 上不再有效。
以上是如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!