Cómo solucionar el error de conexión a una base de datos MySQL 8: The server requested authentication method unknown to the client [caching_sha2_password] in …, o también en otros clientes: (HY000/2054): The server requested authentication method unknown to the client in…, o incluso Authentication plugin ‘caching_sha2_password’ cannot be loaded.

Escenario de trabajo, MySQL 8, error, motivos

En las nuevas versiones de MySQL se ha añadido más seguridad en el inicio de sesión y el protocolo de conexión. Por ello, algunos clientes y aplicaciones que no admiten estos nuevos mecanismos de conexión fallan al acceder a servidores con MySQL 8.

Por ejemplo, WordPress, en su versión 5.3.2 no soporta, al menos directamente, el nuevo método de conexión de MySQL 8. Si queremos crear una web con WordPress en un servidor con MySQL 8, posiblemente nos aparezca este error al intentar acceder o simplemente al intentar ejecutar el script de creación de tablas inicial:

Warning: mysqli_real_connect(): The server requested authentication method unknown to the client caching_sha2_password in /var/www/html/wp-includes/wp-db.php on line 1633
Warning: mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client in /var/www/html/wp-includes/wp-db.php on line 1633
The server requested authentication method unknown to the client
Error al establecer una conexión con la base de datos
Esto significa que la información del nombre de usuario y contraseña de tu archivo wp-config.php es incorrecta o que no podemos contactar con el servidor de la base de datos en localhost. Esto podría significar que el servidor de tu base de datos está caído.
¿Seguro que tienes el nombre de usuario y la contraseña correctos?
¿Seguro que has escrito el hostname correcto?
¿Seguro que funciona el servidor de la base de datos?
Si no estás seguro de qué significan estos términos, deberías contactar con tu alojamiento. Si aún necesitas ayuda, siempre puedes visitar los foros de soporte de WordPress.

The server requested authentication method unknown to the client caching_sha2_password

Solucionar error al establecer conexión con MySQL 8 desde WordPress

Para solucionar el error de acceso a MySQL desde WordPress (y otros aplicativos que no soporten el nuevo método de conexión de MySQL 8), podremos configurar MySQL para que use el método tradicional de conexión. Para ello realizaremos los pasos que exponemos a continuación.

Editaremos el fichero de configuración de MySQL 8, que suele estar (en distribuciones Linux CentOS 7) en /etc/my.cnf, con nano o vi:

nano /etc/my.cnf

Añadiremos el siguiente parámetro en [mysqld] (si existe modificaremos su valor a mysql_native_password), quedando_

[mysqld]
default-authentication-plugin=mysql_native_password

Guardaremos los cambios, si hemos usado nano, con Control + O y cerraremos con Control + X.

Solucionar error al establecer conexión con MySQL 8 desde WordPress

Reiniciaremos el servicio de MySQL para que se apliquen los cambios, teniendo en cuenta que al reiniciarlo las transacciones pendientes se anularán y las conexiones actuales se desconectarán. Es recomendable reiniciar el servicio cuando no haya usuarios conectados. Para reiniciarlo ejecutaremos (para distribuciones CentOS 7) el siguiente comando:

systemctl restart mysqld

A continuación deberemos modificar los usuarios existentes en MySQL añadiendo al «alter» el parámetro: mysql_native_password. Para ello accederemos a la consola de comandos de MySQL, desde la línea de comandos de Linux CentOS 7 escribiremos:

mysql -u root -p

(para acceder con el superusuario root de MySQL, podemos acceder con cualquier otro usuario con permisos suficientes)

Nos solicitará la contraseña de root (o del usuario que utilicemos que tenga permisos de DBA), la introduciremos y accederemos al shell de comandos de MySQL. A continuación introduciremos el siguiente comando para modificar un usuario (existente). Supongamos que para la conexión de WordPress con MySQL estábamos usando el usuario «wp_usuario», para el host «localhost» y con la contraseña «contraseña_usuario». Para este caso introduciremos el comando:

Tendremos que hacer lo anterior para todos los usuarios que queramos que puedan conectarse con el método nativo (tradicional). Para el resto no habrá que hacer modificaciones.

Si queremos crear un nuevo usuario con esta opción podemos usar el comando MySQL:

Solucionar error al establecer conexión con MySQL 8 desde WordPress

Si necesitamos mostrar todos los usuarios de MySQL y el host al que tienen acceso podemos usar el siguiente comando SQL:

Mostrar todos los usuarios de MySQL 8

Con esto nuestro servidor web con WordPress conectará a MySQL 8 sin problemas.