Cuando intenté actualizar de PHP 7.3 a PHP 7.4, recibí este error:
Respuesta inesperada del servidor al hacer caching_sha2 auth 109
A mi entender, esto indica que PHP 7.4 MySQLi está intentando utilizar el caching_sha2_password
complemento. Este artículo señala que PHP MySQLi no es compatible con el complemento (también sugiere soporte futuro para él), pero dado que PHP 7.4 es nuevo y parece estar tratando de usarlo, supongo que debería funcionar. Además, el mensaje de error es diferente que si no fuera compatible ( acceso denegado versus método de autenticación desconocido ).
Así que cambié mi complemento de autenticación MySQL a caching_sha2_password
(usando la misma contraseña que antes):
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '';
FLUSH PRIVILEGES;
Pero esto causó otro error:
Acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: YES).
Volviendo a PHP 7.3 y mysql_native_password
funciona de nuevo.
Utilicé la misma contraseña para ambos complementos, el mismo sitio web y apliqué los mismos cambios en php.ini. Sin embargo, no cambié ninguna mysqli
configuración. Los registros de MySQL no muestran nada, el registro de apache2 solo muestra el mensaje de error 'Acceso denegado'.
¿Php7.4-mysqli tiene soporte para caching_sha2_password
? SI
¿Por qué se niega mi contraseña y cómo puedo solucionarla? Ver mi pregunta de seguimiento
Además, si MySQLi aún no es compatible con el complemento: ¿Cómo puedo usarlo mysql_native_password
?
Access Denied
y luego volveré a ti.ALTER USER ... BY ''
. Cuando intenté lo mismo, estableció una contraseña en blanco.... BY '';
era solo la versión abreviada, en realidad entré... BY 'mySecretPassword';
Access Denied
aunque literalmente copie la contraseña. Mi PHP fue construido un día antes que el tuyo: ¿PHP 7.4.0 (cli) (built: Nov 28 2019 07:27:06) ( NTS )
tal vez es solo un error?Hay un par de formas en que esto podría suceder
mysql_client
método de autenticación. Así es como PHP solía hacerlo de forma nativa, conectándose a MySQL a través de la interfaz CLI de MySQL. El propio cliente de MySQL siempre admitirá sus propios métodos de autenticación.Estás utilizando MySQLND bajo 7.4. Aparentemente, esto fue una mejora para el controlador nativo que no fue anunciado
Todavía hay algunos posibles problemas con él.
fuente
mysql_native_password
ycaching_sha2_password
ya sólo uno de los primeros trabajos.mysqlnd
, lo que podría ser el problema aquí, así que supongo que esperaré para obtener soporte completo.