PHP 8.3 может подключаться к MySQL 8.4, а PHP 5.6 — нет — они несовместимы? [дубликат]MySql

Форум по Mysql
Ответить
Anonymous
 PHP 8.3 может подключаться к MySQL 8.4, а PHP 5.6 — нет — они несовместимы? [дубликат]

Сообщение Anonymous »

Я пытаюсь запустить старое приложение, написанное с использованием PHP 5.6, с базой данных MySQL 8.4. (Изначально он был написан для MySQL 5.something — конечная цель — выполнить пошаговую миграцию/перезапись на PHP 8.3.)
Использование простого тестового файла для попытки подключения к базе данных:

Код: Выделить всё

$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 |
+------------------+-----------+-----------------------+
и добавил следующую строку в my.ini (в MySQL 8.4 удален параметр default_authentication_plugin, упомянутый в предыдущем ответе):

Код: Выделить всё

[mysqld]
mysql_native_password=ON
Перезапустил Apache и MySQL, и это позволило приведенному выше коду работать с PHP 8.3.
Теперь проблема заключается в том, чтобы заставить тот же код работать с 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


Если я изменю FCGIPHPVERSION на «8.3.28», код будет работать. (Поэтому я не думаю, что это проблема с настройками Apache/fcgi.)
Настройки в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»