paso - conexion mysql php 7
PHP-La conexión MySQL no funciona: 2002 No existe ningún archivo o directorio (18)
¡Reemplazar ''localhost'' a ''127.0.0.1'' en el archivo de configuración (conexión db) ayudó!
Estoy tratando de configurar WordPress. Tengo Apache y MySQL en ejecución, y las cuentas y la base de datos están todas configuradas. Traté de hacer una conexión simple:
<?php
$conn = mysql_connect(''localhost'', ''USER'', ''PASSWORD'');
if(!$conn) {
echo ''Error: '' . mysql_errno() . '' - '' . mysql_error();
}
?>
Y siempre entiendo esto:
Error: 2002 - No hay tal archivo o directorio
¿De qué archivo o directorio podría estar hablando?
Estoy en un OS X Snow Leopard, usando el Apache incorporado. Instalé MySQL usando el dmg x86_64.
ACTUALIZACIÓN: descubrí que el socket está en /tmp/mysql.sock, entonces en php.ini, reemplacé todas las ocurrencias de la ruta incorrecta con eso.
Ampliando la respuesta de Matthias D aquí pude resolver este error de 2002 tanto en MySQL como en MariaDB con rutas exactas usando estos comandos:
Primero, obtenga la ruta real al socket MySQL:
netstat -ln | grep -o -m 1 ''/.*mysql.sock''
Luego, obtenga la ruta PHP :
php -r ''echo ini_get("mysql.default_socket") . "/n";''
Usando el resultado de estos dos comandos , conéctelos:
sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock
Si eso devuelve No such file or directory
, solo necesita crear la ruta al mysql.sock de PHP, por ejemplo, si su ruta fuese /var/mysql/mysql.sock
se ejecutaría:
sudo mkdir -p /var/mysql
Luego pruebe el comando sudo ln nuevamente.
Asegúrese de que su servidor local (MAMP, XAMPP, WAMP, etc.) se esté ejecutando.
El error 2002 significa que MySQL no puede conectarse al servidor de base de datos local a través del archivo de socket (por ejemplo, /tmp/mysql.sock
).
Para averiguar dónde está su archivo de socket, ejecute:
mysql_config --socket
luego verifique que su aplicación utiliza el archivo de socket Unix correcto o conecte a través del puerto TCP / IP en su lugar.
Luego, verifique si su PHP tiene la configuración correcta de socket MySQL:
php -i | grep mysql.default_socket
y asegúrese de que ese archivo exista
Pruebe el zócalo:
mysql --socket=/var/mysql/mysql.sock
Si el socket de Unix es incorrecto o no existe, puede enlazarlo simbólicamente, por ejemplo:
ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
o corrija su archivo de configuración (p. ej., php.ini
).
Para probar la conexión PDO directamente desde PHP, puede ejecutar:
php -r "new PDO(''mysql:host=localhost;port=3306;charset=utf8;dbname=dbname'', ''root'', ''root'');"
Compruebe también la configuración entre Apache y CLI (interfaz de línea de comandos), ya que la configuración puede diferir.
Es posible que el servidor se esté ejecutando, pero está tratando de conectarse usando un puerto TCP / IP, canalización con nombre o un archivo de socket Unix diferente al que está escuchando el servidor. Para corregir eso, necesita invocar un programa de cliente (por ejemplo, especificando la opción
--port
) para indicar el número de puerto correcto, o el conducto apropiado o el archivo de socket Unix (por ejemplo, opción de--socket
).
Consulte: Solución de problemas Conexión a MySQL
Otras utilidades / comandos que pueden ayudar a rastrear el problema:
-
mysql --socket=$(php -r ''echo ini_get("mysql.default_socket");'')
-
netstat -ln | grep mysql
-
php -r "phpinfo();" | grep mysql
-
php -i | grep mysql
- Utilice XDebug con
xdebug.show_exception_trace=1
en suxdebug.ini
- En OS X, pruebe
sudo dtruss -fn mysqld
, en depuración de Linux constrace
- Compruebe los permisos en el socket de Unix:
stat $(mysql_config --socket)
y si tiene suficiente espacio libre (df -h
). - Reinicia tu MySQL.
- Verifique
net.core.somaxconn
.
En una Mac, antes de hacer todo el trabajo duro, simplemente verifique su configuración en System Preferences > MySQL
. La mayoría de las veces, he experimentado que el equipo se encuentra con este problema ya que la The MySQL Server Instance is stopped
.
Haga clic en el Start MySQL Server
y la magia sucederá.
Encontré este problema también, luego modifiqué ''localhost'' a ''127.0.0.1'', funciona.
Esto es para Mac OS X con la instalación nativa de Apache HTTP y la instalación personalizada de MySQL .
La respuesta se basa en la excelente respuesta de @ alec-gorge, pero debido a que tuve que realizar algunos cambios específicos para configurarlo en mi configuración, principalmente Mac OS X, pensé que lo agregaría aquí para completar.
Habilitar el soporte de PHP5 para Apache HTTP
Asegúrese de que la compatibilidad con PHP5 esté habilitada en /etc/apache2/httpd.conf
.
Edite el archivo con sudo vi /etc/apache2/httpd.conf
(ingrese la contraseña cuando se le solicite) y elimine el comentario (elimine ;
desde el comienzo de) la línea para cargar el módulo php5_module .
LoadModule php5_module libexec/apache2/libphp5.so
Inicie Apache HTTP con sudo apachectl start
(o restart
si ya se inició y necesita reiniciarse para volver a leer el archivo de configuración).
Asegúrese de que /var/log/apache2/error_log
contiene una línea que indique que el php5_module está habilitado; debería ver PHP/5.3.15
(o similar).
[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations
Buscar el nombre del archivo Socket
Cuando MySQL está en funcionamiento (con ./bin/mysqld_safe
), debe haber líneas de depuración impresas en la consola que le indiquen dónde puede encontrar los archivos de registro. Tenga en cuenta el nombre de host en el nombre del archivo - localhost
en mi caso - que puede ser diferente para su configuración.
El archivo que viene después de Logging to
es importante. Ahí es donde MySQL inicia su trabajo.
130309 12:17:59 mysqld_safe Logging to ''/Users/jacek/apps/mysql/data/localhost.err''.
130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data
Abra el archivo localhost.err
(de nuevo, el suyo puede tener un nombre diferente), es decir, tail -1 /Users/jacek/apps/mysql/data/localhost.err
para averiguar el nombre del archivo de socket: debe ser la última línea.
$ tail -1 /Users/jacek/apps/mysql/data/localhost.err
Version: ''5.5.27'' socket: ''/tmp/mysql.sock'' port: 3306 MySQL Community Server (GPL)
Tenga en cuenta el socket:
parte: ese es el archivo de socket que debe usar en php.ini
.
Hay otra manera (algunos dicen que es más fácil) de determinar la ubicación del nombre de archivo del socket iniciando sesión en MySQL y ejecutándose:
show variables like ''%socket%'';
Configurando PHP5 con soporte MySQL - /etc/php.ini
Hablando de php.ini ...
En el directorio /etc
hay un archivo /etc/php.ini.default . Cópialo en /etc/php.ini .
sudo cp /etc/php.ini.default /etc/php.ini
Abre /etc/php.ini
y busca mysql.default_socket .
sudo vi /etc/php.ini
El valor predeterminado de mysql.default_socket
es /var/mysql/mysql.sock
. Debería cambiarlo al valor que anotó anteriormente: fue /tmp/mysql.sock
en mi caso.
Reemplace el archivo /etc/php.ini
para reflejar el nombre del archivo de socket:
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
Verificación final
Reinicie Apache HTTP.
sudo apachectl restart
Verifique los registros si no hay ningún error relacionado con PHP5. Sin errores significa que ha terminado y PHP5 con MySQL debería funcionar bien. Felicidades!
Estoy usando PHP-FPM o múltiples versiones de php en mi servidor. En mi caso, actualicé el valor de mysqli ya que no existe el parámetro socket predeterminado mysql:
mysqli.default_socket
a :
mysql.default_socket = /path/to/mysql.sock
gracias a @Alec Gorge
Instalé MySQL usando el instalador. De hecho, no había un directorio de datos junto con el directorio ''bin''.
Entonces, creé manualmente el directorio ''data'' en "C: / Program Files / MySQL / MySQL Server 8.0". Y funcionó (cambiando la contraseña de root siguiendo los pasos sugeridos en https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html .
No es que te ayude demasiado, pero en las versiones recientes (e incluso menos recientes ) de MySQL, el código de error 2002 significa "No se puede conectar al servidor MySQL local a través del socket [nombre-de-socket]", así que eso podría decirte un poco más.
Primero, asegúrese de que MySQL se esté ejecutando. Comando: inicio mysqld
Si aún no puede conectarse, ¿cómo se ve su /etc/my.cnf?
Las otras 2 publicaciones son correctas porque necesita verificar su socket porque 2002 es un error de socket.
Un gran tutorial sobre la configuración de LAMP es: http://library.linode.com/lamp-guides/centos-5.3/index-print
Reiniciar el servidor mysql puede ayudar. En mi caso, reiniciar el servidor ahorró mucho tiempo.
service mysql restart
PS- use sudo service mysql restart
para usuarios no root.
Revisaría su archivo php.ini y verificaría que mysql.default_socket está configurado correctamente y también verificaría que su mysqld esté configurado correctamente con un archivo de socket al que pueda acceder. El valor predeterminado típico es "/tmp/mysql.sock".
Si usa Linux: la ruta al archivo mysql.sock es incorrecta. Esto generalmente se debe a que está utilizando (LAMPP) XAMPP y no está en /tmp/mysql.sock
Abra el archivo php.ini y encuentre esta línea:
mysql.default_socket
Y hazlo
mysql.default_socket = /path/to/mysql.sock
Tuve un problema similar y pude resolverlo dirigiéndome a mi mysql con 127.0.0.1
lugar de localhost
.
Esto probablemente significa que tengo algo mal en la configuración de mi servidor, pero esta solución rápida me permite hacerlo ahora mismo.
Tuve un problema similar.
Básicamente, aquí el problema es que probablemente haya dos instancias de ejecución de mysql.
A) Uno corriendo en /etc/init.d
B) Lámpara instalada en / opt / lámpara
Solución:
Paso 1: - Encuentra todas las instancias de ejecución de mysql usando commnad "find / | grep mysqld"
Paso 2: - Cierre los servicios que se ejecutan en /etc/init.d utilizando el servicio de parada mysql
Paso 3: reinicia tus servicios de lámpara con / opt / lamp / lamp restart
Usted debe ser bueno para ir :)
Yo tuve el mismo problema. Mi socket finalmente se encontró en /tmp/mysql.sock. Luego agregué esa ruta a php.ini. Encontré el socket ahí al revisar la página "Estado del servidor" en MySQL Workbench. Si su socket no está en /tmp/mysql.sock, entonces ¿MySQL Workbench podría decirle dónde está? (Dado que usas MySQL Workbench ...)
en mi caso tengo un problema con mysqli_connect.
cuando quiero conectarme
mysqli_connect(''localhost'', ''myuser'',''mypassword'')
mysqli_connect_error () me devuelve este error "No such file or directory"
esto funcionó para mí mysqli_connect(''localhost:3306'', ''myuser'',''mypassword'')