PHP 7.2.8 PDO не может подключиться к MySQL 8.0.12 (GA) в стеке AWS EC2 LEMP

Я тестирую новый веб-сервер LEMP, созданный с использованием Ubuntu Server 18.04 LTS, NGINX 1.14, PHP 7.2.8 и MySQL 8.0.12. Это экземпляр AWS EC2, использующий официальный Canonical AMI. Веб и PHP работают по назначению, за исключением подключения к базе данных. Но я не могу подключиться к базе данных MySQL, используя настройки и функции PDO, которые хорошо работали в других случаях (MySQL 5.7 через PHP 7.1).

Я могу надежно подключиться к серверу (MySQL через SSH) в терминале, используя те же учетные данные, которые пытается использовать PDO. Также надежно удаленно с помощью MySQL Workbench и тех же учетных данных. На сервере нет межсетевого экрана. Брандмауэр работает только через группы безопасности Amazon. С открытым портом 3306 PHP по-прежнему не будет подключаться с помощью PDO. Не пробовал использовать MySQLi, но одна из целей этого - определить и задокументировать, как подключиться через PDO в этой среде. Так что это не было бы решением.

Я понимаю, что защита паролем изменилась в MySQL 8 (и я решил использовать новый более надежный пароль по умолчанию во время установки). Но у меня также сложилось впечатление от http://php.net/manual/en/ref.pdo-mysql.php , что с PHP 7.2.4 это должно работать ... Я не действительно понимаете, что они пытаются сказать в соответствующих параграфах, хотя ...

Неужели это еще не сработает?

РЕДАКТИРОВАТЬ: Удалена информация о конфигурации и устранении неполадок, которая оказалась неактуальной. Надеюсь, что это более четкое / короткое изменение вопроса будет более полезным для тех, кто найдет его позже.

4
задан 4 August 2018 в 12:02
3 ответа

Далее расследование позволило нам узнать, что PHP пока не поддерживает caching_sha2_authentication, mysql пришлось вернуться к родному.

ПРИМЕЧАНИЕ: Нельзя просто создавать учетные записи С mysql_native_password , но необходимо установить значение по умолчанию mysql_native_password.

РЕДАКТИРОВАТЬ: Вырезанная информация, которая, как оказалось, не имела отношения к проблеме.

2
ответ дан 3 December 2019 в 03:04

Текст на странице документации PHP, на которую вы ссылаетесь:

MySQL 8

При запуске версии PHP до 7.1.16 или PHP 7.2 до 7.2.4 установите MySQL 8 Подключаемый модуль пароля сервера по умолчанию для mysql_native_password , иначе вы увидите ошибки, подобные . Сервер запросил метод аутентификации, неизвестный клиенту [caching_sha2_password] , даже если caching_sha2_password не используется.

Это потому что MySQL 8 по умолчанию использует caching_sha2_password, плагин, который не распознается более старыми версиями PHP (mysqlnd). Вместо этого измените его, установив default_authentication_plugin = mysql_native_password в my.cnf. Плагин caching_sha2_password будет поддерживаться в будущих версиях PHP. Между тем, расширение mysql_xdevapi поддерживает его.

Это не означает, что PHP в настоящее время поддерживает caching_sha2_password. Это не. Это означает, что PHP больше не выдает фатальные ошибки при подключении к серверу MySQL 8.0, который объявляет о поддержке caching_sha2_password.

Вы можете установить указанное расширение PECL, если хотите, но оно имеет другой API для mysqlnd, поэтому это не вставная замена и не будет работать с существующим кодом PHP, использующим API mysqlnd.

На данный момент, пока не будет выпущена новая версия PHP mysqlnd, которая фактически поддерживает аутентификацию с помощью caching_sha2_password, ваш единственный вариант - не использовать ее, возвращаясь к mysql_native_password, как описано в документации.

4
ответ дан 3 December 2019 в 03:04

Вы можете изменить метод аутентификации MYsql8 по умолчанию в MySQL Workbench следующим образом:

  1. Открытие MySQL Workbench от имени администратора
  2. Сначала перейдите на экран Options File, выделенный цифрой 1 рядом с ним в связанной снимок экрана.
  3. Прокрутка, а затем изменение метода аутентификации с раскрывающимся списком, выделенным цифрой 2 рядом с ним, и нажатие кнопки «Применить» в правом нижнем углу.

MySQL8 workbench screenshot

0
ответ дан 3 December 2019 в 03:04

Теги

Похожие вопросы