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, решить проблему?
Я подтвердил, что PHP 5 был создан с поддержкой mysql_native_authentication через phpinfo();
Version => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password
API Extensions => mysql,mysqli,pdo_mysql


Подробнее здесь: https://stackoverflow.com/questions/798 ... compatible
Ответить

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

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

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

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

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