Estoy intentando configurar WordPress. Tengo Apache y MySQL en ejecución, y las cuentas y la base de datos están 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 consigo esto:
Error: 2002 - No existe ese archivo o directorio
¿De qué archivo o directorio podría estar hablando?
Estoy en OS X Snow Leopard, usando el Apache integrado. Instalé MySQL usando el dmg x86_64.
ACTUALIZACIÓN: encontré que el socket está en /tmp/mysql.sock, así que en php.ini, reemplacé todas las apariciones de la ruta incorrecta con eso.
php
mysql
connection
mk12
fuente
fuente
/etc/init.d/mysql start
si está en una distribución base de Debian. si falla, verifique el/etc/my.cnf
archivo para la ruta correcta del archivo de socket mysql.Respuestas:
Si usa Linux: la ruta al archivo mysql.sock es incorrecta. Esto generalmente se debe a que está usando (LAMPP) XAMPP y no está en /tmp/mysql.sock
Abra el archivo php.ini y busque esta línea:
Y hacerlo
fuente
localhost
que funcione y TCP / IP está funcionando, por lo que cambiarlo a la dirección TCP / IP127.0.0.1
funcionará.Tuve un problema similar y pude resolverlo abordando mi mysql con en
127.0.0.1
lugar delocalhost
.Esto probablemente significa que tengo algo mal en la configuración de mis hosts, pero esta solución rápida me pone en marcha ahora mismo.
fuente
code
127.0.0.1 localhostcode
. Lo que me da curiosidad por saber por qué la conexión a través de localhost no funcionó. Si alguien pudiera iluminarme, sería feliz.localhost
que funcione y TCP / IP está funcionando, por lo que cambiarlo a la dirección TCP / IP127.0.0.1
funcionará.Esto es para Mac OS X con la instalación nativa de Apache HTTP e instalación personalizada de MySQL .
La respuesta se basa en la excelente respuesta de @ alec-gorge, pero como tuve que buscar en Google algunos cambios específicos para configurarlo en mi configuración, en su mayoría específicos de Mac OS X, pensé en agregarlo aquí para completarlo.
Habilite 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 descomente (elimine;
del principio de) la línea para cargar el módulo php5_module .Inicie Apache HTTP con
sudo apachectl start
(orestart
si ya se ha iniciado y debe reiniciarse para volver a leer el archivo de configuración).Asegúrese de que
/var/log/apache2/error_log
contenga una línea que le indique que php5_module está habilitado; debería verPHP/5.3.15
(o algo similar).Buscando el nombre del archivo de Socket
Cuando MySQL esté en funcionamiento (con
./bin/mysqld_safe
), debería 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
Logging to
es importante. Ahí es donde MySQL registra su trabajo.Abra el
localhost.err
archivo (de nuevo, el suyo podría tener un nombre diferente), es decir,tail -1 /Users/jacek/apps/mysql/data/localhost.err
para averiguar el nombre del archivo de socket, debería ser la última línea.Tenga en cuenta la
socket:
parte: ese es el archivo de socket que debe usarphp.ini
.Hay otra forma (algunos dicen que es más fácil) determinar la ubicación del nombre de archivo del socket iniciando sesión en MySQL y ejecutando:
Configuración de PHP5 con soporte MySQL - /etc/php.ini
Hablando de php.ini ...
En el
/etc
directorio hay un archivo /etc/php.ini.default . Cópialo en /etc/php.ini .Abra
/etc/php.ini
y busque mysql.default_socket .El valor predeterminado
mysql.default_socket
es/var/mysql/mysql.sock
. Debería cambiarlo por el valor que anotó anteriormente, fue/tmp/mysql.sock
en mi caso.Reemplace el
/etc/php.ini
archivo para reflejar el nombre del archivo de socket:Verificación final
Reinicie Apache HTTP.
Verifique los registros si no hay ningún error relacionado con PHP5. Ningún error significa que ha terminado y PHP5 con MySQL debería funcionar bien. ¡Felicidades!
fuente
mysql_connect
, que es el problema real de la pregunta original y no genérico concepto erróneo de la instalación de software.localhost
. Nadie que busque ayuda para configurar xamp en macos llegará aquí buscando en Google. Por eso utilicé el término "basura". Este hilo no tiene nada que ver con macos sino solo con mysql (ni siquiera con php).¡Reemplazar 'localhost' por '127.0.0.1' en el archivo de configuración (conexión db) ayudó!
fuente
Reiniciar el servidor mysql puede ayudar. En mi caso, reiniciar el servidor ahorró mucho tiempo.
PS- uso
sudo service mysql restart
para usuarios no root.fuente
Primero, asegúrese de que MySQL se esté ejecutando. Comando: mysqld start
Si aún no puede conectarse, entonces: ¿Cómo es su /etc/my.cnf? (o /etc/msyql/my.cnf)
Las otras 2 publicaciones son correctas en el sentido de que debe verificar su socket porque 2002 es un error de socket.
Un gran tutorial sobre cómo configurar LAMP es: http://library.linode.com/lamp-guides/centos-5.3/index-print
fuente
/usr/local/mysql/mysql-test/include/default_my.cnf
, ¿debo copiarlo como my.cnf/etc
?No es que te ayude mucho, 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-del-socket]", por lo que podría decirte un poco más.
fuente
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:
Luego obtenga la ruta de PHP :
Utilizando la salida de estos dos comandos , vincúlelos:
Si eso regresa
No such file or directory
, solo necesita crear la ruta al PHP mysql.sock, por ejemplo, si su ruta fuera/var/mysql/mysql.sock
, ejecutaría:Luego intente nuevamente el comando sudo ln .
fuente
Verificarí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".
fuente
/var/mysql/mysql.sock
, pero ese camino no existe.También encontré este problema, luego modifiqué 'localhost' a '127.0.0.1', funciona.
fuente
en mi caso tengo un problema con mysqli_connect.
cuando quiero conectar
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () devuélveme este error "No existe tal archivo o directorio"
esto funcionó para mí
mysqli_connect('localhost:3306', 'myuser','mypassword')
fuente
El error 2002 significa que MySQL no puede conectarse al servidor de la base de datos local a través del archivo de socket (por ejemplo
/tmp/mysql.sock
).Para saber dónde está su archivo de socket, ejecute:
luego, verifique que su aplicación use el archivo de socket Unix correcto o conéctese a través del puerto TCP / IP en su lugar.
Luego, verifique si su PHP tiene la configuración correcta de socket MySQL:
y asegúrese de que ese archivo exista .
Pruebe el enchufe:
Si el socket Unix es incorrecto o no existe, puede vincularlo simbólicamente, por ejemplo:
o corrija su archivo de configuración (por ejemplo
php.ini
).Para probar la conexión PDO directamente desde PHP, puede ejecutar:
Verifique también la configuración entre Apache y CLI (interfaz de línea de comandos), ya que la configuración puede ser diferente.
Consulte: Solución de problemas de 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
xdebug.show_exception_trace=1
en suxdebug.ini
sudo dtruss -fn mysqld
, en Linux depure constrace
stat $(mysql_config --socket)
y si tiene suficiente espacio libre (df -h
).net.core.somaxconn
.fuente
Asegúrese de que su servidor local (MAMP, XAMPP, WAMP, etc.) esté funcionando.
fuente
Tuve un problema similar.
Básicamente, aquí el problema es que probablemente hay dos instancias de mysql ejecutándose.
A) Una que se ejecuta en /etc/init.d
B) La lámpara se está instalando en / opt / lamp
Solución:
Paso 1: - Encuentre todas las instancias en ejecución de mysql usando commnad "find / | grep mysqld"
Paso 2: - Cierre los servicios que se ejecutan en /etc/init.d usando service mysql stop
Paso 3: - Reinicie los servicios de Lamp usando / opt / lamp / lamp restart
Usted debe ser bueno para ir :)
fuente
En una Mac, antes de hacer todo el trabajo duro, simplemente verifique su configuración
System Preferences > MySQL
. La mayoría de las veces, he experimentado que el equipo se ha encontrado con este problema desde entoncesThe MySQL Server Instance is stopped
.Haga clic en el
Start MySQL Server
botón y sucederá la magia.fuente
Estoy usando PHP-FPM o múltiples versiones de php en mi servidor. En mi caso actualizo el valor de mysqli ya que no hay un parámetro de socket predeterminado de mysql:
a :
gracias a @Alec Gorge
fuente
Yo tuve el mismo problema. Mi socket finalmente se encontró en /tmp/mysql.sock. Luego agregué esa ruta a php.ini. Encontré el socket allí al revisar la página "Estado del servidor" en MySQL Workbench. Si su socket no está en /tmp/mysql.sock, ¿tal vez MySQL Workbench podría decirle dónde está? (De acuerdo, usa MySQL Workbench ...)
fuente
He instalado MySQL usando el instalador. De hecho, no había ningún directorio de datos junto al directorio 'bin'.
Entonces, creé manualmente el directorio 'datos' en "C: \ Archivos de programa \ 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 .
fuente
Digital Ocean MySql 2002-no-tal-archivo-o-directorio
Agregar este final de archivo
/etc/mysql/my.cnf
Reinicie MySql
service mysql restart
fuente
También tuve el mismo problema en un servidor Linux. Lo que me ayudó fue el comando ' sudo reboot ', que se usa para reiniciar el servidor Linux.
fuente
habilitar e iniciar el servicio mariadb
sudo systemctl habilitar mariadb.service
sudo systemctl start mariadb.service
fuente