Advertencia: mysqli_real_connect(): (HY000/2002): No existe tal archivo o directorio en /private/tmp/wordpress/wp-includes/wp-db.php en la línea 1452

7 minutos de lectura

avatar de usuario
un chico noruego

Estoy tratando de ejecutar PHPUnit para probar un complemento de WordPress, pero el error en el título sigue apareciendo.

Usé WP-CLI para configurar las pruebas unitarias, pero también WP-CLI arroja un error similar cuando intento ejecutarlo.

Yo uso MAMP para ejecutar la base de datos.

Configuré WP-CLI y PHPUnit como phars, que tienen un alias en ~/.bash-profile, y se ejecutó con el “php” predeterminado proporcionado por OS X. Cambié esto y ejecuté WP-CLI y PHPUnit con la última versión de PHP suministrado por MAMP arregló WP-CLI (se estaba ejecutando y conectando a la base de datos sin problemas) pero PHPUnit seguía arrojando el mismo error.

Intenté editar el archivo wp-config.php y configurar el host en “:/path/to/mamp/mysql.socket”, “localhost:/path/to/mamp/mysql.socket” y “127.0.0.1 “, ninguno de los cuales ayudó.

Estoy totalmente atascado y no sé qué probar a continuación.

  • Posiblemente un duplicado de stackoverflow.com/q/4219970/1924128. Ver especialmente stackoverflow.com/a/32575869/1924128.

    – JD

    6 de febrero de 2016 a las 15:21

  • Posible duplicado de Advertencia: mysql_connect(): [2002] No existe tal archivo o directorio (intentando conectarse a través de unix:///tmp/mysql.sock) en

    – Nilpo

    18 de marzo de 2017 a las 1:44

  • En mi caso, fue un problema de Azure con la cadena de conexión stackoverflow.com/questions/56007265/…

    –Shady Mohamed Sherif

    6 mayo 2019 a las 14:40

avatar de usuario
doug thompson

Acabo de encontrarme con este error: ¿ha verificado que existe el esquema de que su wp-config.php es especificar?

En mi caso, me había olvidado por completo de crearlo, por lo que la solución fue tan simple como un CREATE DATABASE wordpress.

También me encontré con este error cuando el wp-config.php el host de la base de datos es incorrecto (intente cambiar localhost y 127.0.0.1).

  • Cambiar el host local a 127.0.0.1 lo hizo por mí, ¡muchas gracias!

    – Hunter WebDev

    18 de agosto de 2016 a las 20:28

  • Sucedió después de instalar PHP 7.1, esto resolvió el problema, tx.

    – octales

    20 de abril de 2017 a las 13:36

  • Cambiar a 127.0.0.1 no es un comportamiento previsto. Es una solución. Consulte mi respuesta si desea corregir el problema subyacente.

    – Nilpo

    27 de abril de 2017 a las 9:01

  • Cambiando localhost al nombre del servicio en la ventana acoplable funcionó para mí.

    – Ramin Firooz

    16 de julio de 2020 a las 11:42

avatar de usuario
Nilpo

Primero, asegúrese de que MySql se esté ejecutando. No creará un archivo de socket si el proceso no ha comenzado.

netstat -tulpn | grep mysql

o

ps -e | grep mysql

Si se está ejecutando MySql, cambiar el host de la base de datos de localhost a 127.0.0.1 en wp-config.php funciona, pero es solo una solución.

cuando especificas localhostla mysqli_real_connect() La función intenta conectarse a su base de datos a través de un socket Unix que no puede encontrar (de ahí el error “no existe tal archivo”). Cuando especifica 127.0.0.1intenta conectarse a su base de datos usando el puerto TCP predeterminado (típicamente 3306) que funciona.

Eso no soluciona el problema de que PHP no sabe dónde encontrar su socket MySql. Debe configurar las siguientes opciones en su php.ini. La ubicación del zócalo variará según su sistema operativo, pero normalmente puede encontrarlo ejecutando locate mysql.sock. Aquí están las configuraciones que funcionan para mí en CentOS 6.8.

php.ini

pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

Otros sistemas de uso común /tmp/mysqld.sock. Puede verificar la ubicación configurada revisando el archivo de configuración de MySql my.cfg.

Una vez que haya configurado PHP para que apunte a la ubicación de socket correcta, reinicie Apache/nginx para que tome la nueva configuración.

Ahora puedes usar localhost Como era la intención.

  • Esta es una muy buena explicación (+1) pero permítame criticar (no usted, solo la decisión de los desarrolladores del controlador mysqli): “Cuando especifica localhost, la función mysqli_real_connect () intenta conectarse a su base de datos a través de un socket Unix que no puede encontrar “Cuando pongo localhost cadena en cualquier configuración de una aplicación en la que trabajo. Estoy pensando en esto como un nombre de dominio. ¿Cómo es que este nombre de dominio se convierte en una cadena mágica dentro de mysqli_real_connect que le dice que se conecte a través de un enchufe? Critico esto porque mi problema similar a los OP fue una consecuencia del uso del servidor MySQL en Docker

    – Marecky

    27 de enero de 2018 a las 18:14


  • @Marecky Planteas una buena pregunta. Sin embargo, no es una decisión del desarrollador de mysql, en realidad es una práctica subyacente de Unix. Cuando especifica “localhost”, utiliza un socket local de Unix. Este método basado en el sistema de archivos proporciona una mejor seguridad (solo se puede usar localmente) y un mejor rendimiento (sin sobrecarga de TCP). Al proporcionar cualquier otro nombre de host o dirección IP, se realiza una llamada externa que requiere TCP/IP. Así es como funciona la red Unix por diseño. El uso de 127.0.0.1 obliga a su sistema a realizar una llamada externa a sí mismo. Este diseño le permite conectarse a su servidor de la misma manera que lo harían los clientes externos.

    – Nilpo

    28 de enero de 2018 a las 3:37

  • Gracias por más aclaraciones sobre cómo funciona Linux, recuerdo que podría tener más problemas con respecto al acceso a los servidores por localhost nombre de dominio. Ahora sé que es un caso más amplio con respecto a más software de Linux.

    – Marecky

    28 de enero de 2018 a las 21:13


  • El usuario está utilizando un MAC, por lo que el netstat respuesta no funciona. Considere el uso de un conjunto diferente de options.

    – pensar bien

    7 sep 2020 a las 12:25

  • Hola Nilpo, actualicé la ruta del socket en php.ini y uso localhost, pero sigo teniendo el problema de asme. Estoy en aws ec2 que aloja Linux AMI. ¿Tienes alguna idea sobre esto?

    – Arpita Hunka

    14 de septiembre de 2020 a las 16:28

Simplemente vaya a su phpMyAdmin, haga clic en su base de datos y copie la ip donde se ejecuta el servicio y reemplace en su archivo wp-config.php:

/** Nombre de host de MySQL */ define(‘DB_HOST’, ‘localhost’);

/** Nombre de host MySQL */ define(‘DB_HOST’, ‘ip_where_is_running_mysqlserver’);

Reemplace Localhost a ip de servidor MySQL en ejecución

  • ¡Gracias @Gilson Jelembi! Tu solución funcionó para mí. Cuando usaba MAMP en mi Mac, abrí phpMyAdmin y vi el texto “Servidor: localhost:8889” cerca de la parte superior de phpMyAdmin. Luego agregué define('DB_HOST', 'localhost:8889'); en mi wp-config.php archivo, reinicié MAMP y abrí mi URL local en un navegador y funcionó.

    – RisingPhoenix1979

    16 de agosto de 2021 a las 15:39

avatar de usuario
Vicario

Me confundió pero finalmente lo resolví.

Mi puerto MySQL es 3308, así que cambio “127.0.0.1” a “localhost:3308” en

$cfg['Servers'][$i]['host'].

¡Funciona!

Además, puse

$cfg['Servers'][$i]['controluser'] = '';

$cfg['Servers'][$i]['controlpass'] = '';

Y…

$cfg['Servers'][$i]['auth_type'] = 'cookie';

Pero creo que la clave más importante es el cambio de puerto.

Creación simbólica para wp-cli para encontrar es más eficiente y elimina el problema de editar muchos archivos y realizar un seguimiento de su wp-config expediente.

Hice esto para MAC Sierra y MAMP PRO,

Cree un enlace simbólico del archivo de socket mysql después de ubicarlo usando netstat

netstat -a | grep mysql

Crear archivo en var carpeta.

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

La lista de complementos de wp de su carpeta instalada de WordPress funciona

/path/to/wordpress/installation $ wp plugin list
-------------------------------------------------+----------+-----------+---------+
| name                                            | status   | update    | version |
+-------------------------------------------------+----------+-----------+---------+
| advanced-custom-fields                          | active   | none      | 5.9.0   |
| akismet                                         | active   | none      | 4.1.6   |
| bbp-voting                                      | inactive | available | 1.3.5   |
| breadcrumb-navxt                                | active   | none      | 6.5.0   |
| contact-form-7                                  | active   | none      | 5.2.2   |
| flamingo                                        | active   | none      | 2.2     |
| keydesign-addon                                 | active   | none      | 3.2     |
| post-my-contact-form-7                          | active   | none      | 4.1.8   |

avatar de usuario
asistente.de.pista.6

En la línea informada en /wp-includes/wp-db.php (Línea 1489 en WordPress v 4.5), el código dice:

mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

El problema desaparece agregando un @ Al frente. Así que el código debería leer:

@mysqli_real_connect( $this->duh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

Agrega lo que falta @guarde y cargue el archivo modificado para que desaparezca la advertencia.

¿Ha sido útil esta solución?