web-dev-qa-db-fra.com

PHP 7.2.8 PDO ne parvient pas à se connecter à MySQL 8.0.12 (GA) dans AWS EC2 LEMP Stack

Je teste un nouveau serveur Web LEMP construit avec Ubuntu Server 18.04 LTS, NGINX 1.14, PHP 7.2.8 et MySQL 8.0.12. Il s'agit d'une instance AWS EC2 utilisant l'AMI canonique officielle. Web et PHP fonctionnent comme prévu en dehors de la connexion à la base de données. Mais je ne peux pas me connecter à une base de données MySQL en utilisant des paramètres et des fonctions PDO qui ont bien fonctionné dans d'autres (MySQL 5.7 via PHP 7.1) cas.

Je peux me connecter de manière fiable sur le serveur (MySQL via SSH) dans le terminal en utilisant les mêmes informations d'identification que le PDO tente d'utiliser. Aussi fiable à distance en utilisant MySQL Workbench et les mêmes informations d'identification. Il n'y a pas de pare-feu sur le serveur. Le pare-feu se fait uniquement via les groupes de sécurité d'Amazon. Avec le port 3306 grand ouvert, PHP ne se connectera toujours pas en utilisant un PDO. Je n'ai pas essayé d'utiliser MySQLi, mais l'un des objectifs de ceci est de déterminer et de documenter comment se connecter via PDO dans cet environnement Donc, ce ne serait pas une solution.

Je comprends que la sécurité des mots de passe a changé avec MySQL 8 (et j'ai choisi d'utiliser le nouveau mot de passe par défaut plus fort lors de l'installation). Mais j'ai également eu l'impression de http://php.net/manual/en/ref.pdo-mysql.php qu'à partir de PHP 7.2.4, cela devrait fonctionner ... Je ne comprends pas vraiment ce qu'ils essaient de dire dans les paragraphes pertinents, cependant ...

Cela ne devrait-il pas encore fonctionner?

EDIT: Suppression des informations de configuration et de dépannage qui se sont révélées non pertinentes. Espérer que cette édition plus claire/plus courte de la question est plus utile à ceux qui la trouveront plus tard.

4
HumanJHawkins

Une enquête plus approfondie nous a permis d'apprendre que PHP ne prend pas encore en charge la mise en cache_sha2_authentication, mysql a dû revenir en natif.

REMARQUE: On ne peut pas simplement créer des comptes WITH mysql_native_password, mais doit définir la valeur par défaut sur mysql_native_password.

EDIT: Coupez les informations qui se sont avérées sans rapport avec le problème.

2
Gerard H. Pille

Le texte de la page de documentation PHP à laquelle vous avez lié est:

MySQL 8

Lors de l'exécution d'une version PHP avant 7.1.16, ou PHP 7.2 avant 7.2.4, définissez le plug-in de mot de passe par défaut de MySQL 8 Server sur mysql_native_password ou bien vous verrez des erreurs similaires à Le serveur a demandé une méthode d'authentification inconnue du client [caching_sha2_password] même lorsque caching_sha2_password n'est pas utilisé.

En effet, MySQL 8 utilise par défaut caching_sha2_password, un plugin qui n'est pas reconnu par les anciennes versions de PHP (mysqlnd). Au lieu de cela, modifiez-le en définissant default_authentication_plugin = mysql_native_password dans my.cnf. Le plugin caching_sha2_password sera pris en charge dans une future version PHP. En attendant, l'extension mysql_xdevapi la supporte.

Cela ne signifie pas que PHP supporte actuellement caching_sha2_password. Ce ne est pas. Cela signifie que PHP ne génère plus d'erreurs fatales lors de la connexion à un serveur MySQL 8.0 qui annonce la prise en charge de caching_sha2_password.

Vous pouvez installer l'extension PECL nommée si vous le souhaitez, mais elle a une API différente de mysqlnd, donc ce n'est pas un remplacement direct et ne fonctionnera pas avec le code PHP existant qui utilise l'API mysqlnd.

Pour le moment, jusqu'à ce qu'une nouvelle version de PHP mysqlnd soit publiée qui prenne réellement en charge l'authentification avec caching_sha2_password, votre seule option est de ne pas l'utiliser, en revenant à mysql_native_password comme indiqué.

4
Michael Hampton

Vous pouvez modifier la méthode d'authentification par défaut de MYsql8 dans MySQL Workbench en:

  1. Ouverture du plan de travail MySQL en tant qu'administrateur
  2. Aller d'abord à l'écran du fichier d'options surligné avec un 1 à côté dans la capture d'écran liée.
  3. Faites défiler puis modifiez la méthode d'authentification avec la liste déroulante surlignée avec un 2 à côté et appuyez sur Appliquer en bas à droite.

MySQL8 workbench screenshot

0
mikeLundquist