Rumah >pangkalan data >tutorial mysql >Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4
Salah satu perubahan besar yang diperkenalkan dalam MySQL 8.4 (LTS terkini keluaran pada 2024) ialah pemalam "Kata Laluan Asli MySQL" ialah no lebih lama didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya.
Perubahan ini mempengaruhi PHP dan aplikasi lain yang menggunakan pangkalan data MySQL dengan pemalam pengesahan mysql_native_password. Oleh kerana pemalam mysql_native_password tidak lagi dimuatkan secara lalai atau tidak tersedia sama sekali, sambungan PHP PDO/MySQLi gagal.
Apabila cuba menyambung ke pangkalan data menggunakan pemalam mysql_native_password yang tidak lagi dimuatkan, PDO/MySQLi membuang ralat dikembalikan oleh MySQL:
PDO:
SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded
MySQLi:
mysqli_sql_exception Plugin 'mysql_native_password' is not loaded.
Pada MySQL 8.0.34 hingga 8.3, menggunakan pemalam mysql_native_password menghasilkan amaran log masuk ralat 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 membuat perubahan untuk tidak memuatkan pemalam mysql_native_password lagi, yang mengakibatkan ralat yang ditunjukkan di atas. Pada MySQL 9.0, pemalam mysql_native_password dialih keluar sepenuhnya, yang juga mengakibatkan ralat yang sama.
PHP mempunyai sokongan untuk pengesahan caching_sha2_password sejak PHP 7.4. Untuk membetulkan ralat ini, tukar pemalam pengesahan pengguna MySQL kepada caching_sha2_password.
Pada konsol MySQL, jalankan yang berikut untuk menyenaraikan pengguna menggunakan pemalam pengesahan yang ditamatkan:
SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
Menjalankan arahan di atas harus menyenaraikan semua pengguna yang menggunakan mysql_native_password plugin:
Pada konsol MySQL dengan kebenaran yang mencukupi, jalankan arahan berikut pada setiap pengguna menggunakan mysql_native pemalam:
ALTER USER ''@'' IDENTIFIED WITH caching_sha2_password BY '';
Selepas pemalam pengesahan dikemas kini, PHP dan aplikasi lain akan dapat menyambung ke pangkalan data melalui pemalam caching_sha2_password.
Walaupun MySQL 8.4 tidak lagi mendayakan pemalam mysql_native_password secara lalai, ia masih boleh dilakukan untuk membolehkan pemalam ini. Ia tidak disyorkan untuk melakukannya melainkan aplikasi PHP menjalankan PHP 7.3 atau versi yang lebih lama, di mana ia tidak boleh menggunakan pemalam caching_sha2_password.
Untuk mendayakan pemalam mysql_native_password, tambahkan yang berikut pada bahagian [mysqld] dalam fail konfigurasi MySQL dan mulakan semula perkhidmatan pelayan MySQL.
Pada sistem berasaskan Debian/Ubuntu, fail ini terletak dalam direktori /etc/mysql/. Adalah disyorkan untuk mencipta fail baharu (bernama /etc/mysql/conf.d/enable-mysql-native-password.cnf, sebagai contoh) untuk ini.
SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded
Perhatikan bahawa pemalam mysql_native_password ialah dikeluarkan masuk MySQL 9.0, jadi menambah konfigurasi di atas tidak berfungsi dan boleh menyebabkan ralat konfigurasi kerana konfigurasi mysql_native_password tidak lagi sah pada MySQL 9.0.
Atas ialah kandungan terperinci Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!