Я пытаюсь запустить старое приложение, написанное с использованием 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
PHP 8.3 может подключаться к MySQL 8.4, а PHP 5.6 — нет — они несовместимы? ⇐ MySql
Форум по Mysql
1770398244
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.
Теперь проблема заключается в том, чтобы заставить тот же код работать с [b]PHP 5.6[/b] на том же компьютере и том же сервере 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79883831/php-8-3-can-connect-to-mysql-8-4-but-php-5-6-cannot-are-they-not-compatible[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия