PHP 7.2.8 O PDO Falha ao Conectar-se ao MySQL 8.0.12 (GA) na Pilha AWS EC2 LEMP

2

Estou testando um novo servidor web LEMP construído com o Ubuntu Server 18.04 LTS, o NGINX 1.14, o PHP 7.2.8 e o MySQL 8.0.12. É uma instância do AWS EC2 usando o AMI oficial da Canonical. Web e PHP funcionam como planejados, além da conexão com o banco de dados. Mas não consigo me conectar a um banco de dados MySQL usando configurações e funções do PDO que funcionaram bem em outros casos (MySQL 5.7 via PHP 7.1).

Eu posso conectar-se de forma confiável no servidor (MySQL via SSH) no terminal usando as mesmas credenciais que o PDO tenta usar. Também confiável de remoto usando o MySQL Workbench e as mesmas credenciais. Não há firewall no servidor. O firewall é apenas através dos grupos de segurança da Amazon. Com a porta 3306 bem aberta, o PHP ainda não se conectará usando um PDO. Não tentei usar o MySQLi, mas um dos propósitos é determinar e documentar como conectar via PDO neste ambiente. Então isso não seria uma solução.

Eu entendo que a segurança da senha mudou com o MySQL 8 (e escolhi usar a nova senha padrão mais strong durante a instalação). Mas também tive a impressão de link que, a partir do PHP 7.2.4, isso deve funcionar. .. Eu realmente não entendo o que eles estão tentando dizer nos parágrafos relevantes lá ...

Não se espera que isso funcione ainda?

EDITAR: Removemos as informações de configuração e solução de problemas que se mostraram irrelevantes. Esperando que essa edição mais limpa / curta da pergunta seja mais útil para aqueles que a encontrarem mais tarde.

    
por HumanJHawkins 01.08.2018 / 04:08

3 respostas

1

Investigações posteriores nos permitiram aprender que o PHP não suporta caching_sha2_authentication ainda, o mysql tinha que reverter para o nativo.

NOTA: não se pode simplesmente criar contas WITH mysql_native_password , mas deve definir o padrão como mysql_native_password.

EDITAR: Cortar informações que não estão relacionadas ao problema.

    
por 01.08.2018 / 09:07
2

O texto na página de documentação do PHP que você vinculou é:

MySQL 8

When running a PHP version before 7.1.16, or PHP 7.2 before 7.2.4, set MySQL 8 Server's default password plugin to mysql_native_password or else you will see errors similar to The server requested authentication method unknown to the client [caching_sha2_password] even when caching_sha2_password is not used.

This is because MySQL 8 defaults to caching_sha2_password, a plugin that is not recognized by the older PHP (mysqlnd) releases. Instead, change it by setting default_authentication_plugin=mysql_native_password in my.cnf. The caching_sha2_password plugin will be supported in a future PHP release. In the meantime, the mysql_xdevapi extension does support it.

Isso não significa que o PHP atualmente suporta caching_sha2_password. Isso não. Isso significa que o PHP não gera mais erros fatais ao se conectar a um servidor MySQL 8.0 que anuncia suporte para caching_sha2_password.

Você pode instalar a extensão PECL nomeada, se desejar, mas ela possui uma API diferente para o mysqlnd, portanto, não é uma substituição imediata e não funcionará com o código PHP existente que usa a API do mysqlnd.

No momento, até que uma nova versão do PHP mysqlnd seja lançada e que realmente suporte a autenticação com o cache_sha2_password, sua única opção é não usá-la, voltando a mysql_native_password como documentado.

    
por 03.08.2018 / 16:10
0

Você pode alterar o método de autenticação padrão do MYsql8 no MySQL Workbench por:

  1. Abrindo o ambiente de trabalho do MySQL como administrador
  2. Primeiro, vá para a tela Arquivo de opções realçada com um 1 ao lado dela na captura de tela vinculada.
  3. A rolagem para a alteração do método de autenticação com o menu suspenso destacado com um 2 ao lado dele e a aplicação da legenda no canto inferior direito.

    
por 13.11.2018 / 23:45