Использование простого тестового файла для попытки подключения к базе данных:
Код: Выделить всё
$dbtest1 = @mysql_connect("localhost","root","password");
if (!$dbtest1) print mysql_error();
$dbtest2 = mysqli_connect("localhost", "root", "password");
Сервер запросил неизвестный клиенту метод аутентификации
**
Предупреждение**: mysqli_connect(): Сервер запросил неизвестный клиенту метод аутентификации [caching_sha2_password]...
Сначала я подумал, что это потому, что приложение написано с использованием старая библиотека php-mysql, а не mysqli. Но ошибка возникает и с mysqli, как показано выше.
Я видел здесь инструкции по включению mysql_native_password для mysql вместо использования аутентификации caching_sha2, чего я и хочу. (Также обратите внимание, что в этом вопросе говорится: «В настоящее время расширение PHP mysqli не поддерживает новую функцию». Это предположительно применимо к среде PHP 5.6.)
Поэтому я изменил пользователя root, чтобы использовать mysql_native_password:
Код: Выделить всё
mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
Код: Выделить всё
[mysqld]
mysql_native_password=ON
Теперь проблема заключается в том, чтобы заставить тот же код работать с PHP 5.6 на том же компьютере и том же сервере Apache (с использованием отдельного виртуального хоста и fcgi). Ниже приведены настройки моего виртуального хоста в httpd.conf:
Код: Выделить всё
Define FCGIPHPVERSION "5.6.40"
FcgidInitialEnv PHPRC ${PHPROOT}${FCGIPHPVERSION}
Options +Indexes +Includes +FollowSymLinks +MultiViews +ExecCGI
AddHandler fcgid-script .php
FcgidWrapper "${PHPROOT}${FCGIPHPVERSION}/php-cgi.exe" .php
Настройки в php.ini для обеих сред практически идентичны - нет никаких различий, касающихся настроек mysql.
Я не могу понять, почему сервер отправляет обратно запрос на caching_sha2_password, хотя база данных ясно показывает, что root должен использовать mysql_native_password. У меня возникает ощущение, что PHP 5.6 категорически не будет работать с MySQL 8.4, независимо от того, какая библиотека используется. Есть ли в каком-либо наборе руководств что-то, подробно описывающее это? Поможет ли переход на более раннюю версию MySQL, например 8.0, решить проблему?
Подробнее здесь: https://stackoverflow.com/questions/798 ... compatible
Мобильная версия