如何修復 MySQL 8.4 上的 mysql_native_password 未加載錯誤

mysql 8.4(截至 2024 年的最新 LTS 版本)中引入的主要變化之一是默認情況下不再啟用“MySQL 本機密碼”插件。此外,MySQL 9.0完全刪除了這個插件。 此更改會影響 php 和其他使用 MySQL 數據庫以及 mysql_native_password 身份驗證插件的應用程序。由于默認情況下不再加載 mysql_native_password 插件或根

如何修復 MySQL 8.4 上的 mysql_native_password 未加載錯誤

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_native_password 列出 MySQL 用戶

在 MySQL 控制臺上,運行以下命令以列出使用已棄用的身份驗證插件的用戶:

SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';

運行上述命令應列出所有使用mysql_native_password 插件:

如何修復 MySQL 8.4 上的 mysql_native_password 未加載錯誤

將 mysql_native_password 用戶更新為 caching_sha2_password

在具有足夠權限的 MySQL 控制臺上,使用 mysql_native_password 插件對每個用戶運行以下命令:

ALTER USER '<USERNAME>'@'<HOST>' IDENTIFIED WITH caching_sha2_password BY '<PASSWORD>';

更換分別是 MySQL 用戶的用戶名、主機和密碼。

身份驗證插件更新后,PHP 和其他應用程序將能夠通過以下方式連接到數據庫: caching_sha2_password 插件。

重新啟用 MySQL 本機密碼插件

雖然 MySQL 8.4 不再啟用默認情況下 mysql_native_password 插件,仍然可以啟用此插件。不建議這樣做,除非 PHP 應用程序運行 PHP 7.3 或更早版本,否則無法使用 caching_sha2_password 插件。

要啟用 mysql_native_password 插件,請將以下內容添加到 [mysqld] 部分MySQL 配置文件并重新啟動 MySQL 服務器服務。

在基于 debian/ubuntu 的系統上,此文件位于 /etc/mysql/目錄。建議為此創建一個新文件(例如,名為 /etc/mysql/conf.d/enable-mysql-native-password.cnf)。

# Enable mysql_native_password plugin[mysqld]mysql_native_password=ON

請注意,mysql_native_password 插件是刪除于 MySQL 9.0,所以添加上面的配置不起作用,可以 導致配置錯誤,因為 mysql_native_password 配置在 MySQL 9.0 上不再有效。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享