No se puede conectar al servidor MySQL local a través del socket '/var/mysql/mysql.sock' (38)

385

Tengo un gran problema al intentar conectarme a mysql. Cuando corro:

/usr/local/mysql/bin/mysql start

Tengo el siguiente error:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

Tengo mysql.sockbajo el /var/mysqldirectorio.

En /etc/my.cnftengo:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

y en /etc/php.initengo:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

He reiniciado apache usando sudo /opt/local/apache2/bin/apachectl restart

Pero aún tengo el error.

De lo contrario, no sé si eso es relevante, pero cuando lo hago mysql_config --socketsme sale

--socket         [/tmp/mysql.sock]
Lambivista
fuente
53
¿Se está ejecutando MySQL?
David
2
Eso ciertamente explica el error al intentar conectarse a él. ¿Cómo, como mencionó @Romain, hay algo en los registros de MySQL (prueba /var/log/mysqlo en algún lugar por allí) que indique por qué no se está ejecutando? ¿Recibe un error cuando intenta iniciarlo?
David
55
Recibía el mismo error, pero en mi caso, descubrí que mysql no se iniciaba porque el disco estaba 100% lleno. /var/log/mysqld.log fue útil.
yellavon
44
Supongo que la razón por la que preguntan si se está ejecutando es porque el socket se realiza cuando se inicia el servicio. instalé mysql, pero nunca comencé el servicio, por lo que el archivo .sock no existe. escriba service mysqld startsi acaba de instalar. hth
changokun
2
A continuación la respuesta de shimanyi sudo service mysql startme salvó
Kiren Siva

Respuestas:

218

Si su archivo my.cnf (generalmente en la carpeta / etc / mysql / ) está configurado correctamente con

socket=/var/lib/mysql/mysql.sock

puede verificar si mysql se está ejecutando con el siguiente comando:

mysqladmin -u root -p status

intente cambiar su permiso a la carpeta mysql. Si está trabajando localmente, puede intentar:

sudo chmod -R 755 /var/lib/mysql/

eso me resolvió

marimaf
fuente
11
Me ayudó después de seguir los pasos anteriores y reiniciar el mysqldservicio.
whirlwin
11
Sería mejor si configura los permisos en 755 para que solo el propietario del directorio pueda escribir en él.
codewaggle
2
¡Mi problema era en realidad que mi volumen de almacenamiento para mi aplicación web se había quedado sin espacio! ¡Clásico!
James T Snell
3
En mi openSUSE 12.3, my.cnf está en / etc /.
también debemos cambiar el permiso a /var/log/mysqld.log, gracias
Allahbakash.G
94

¿Está seguro de que instaló mysql y también el servidor mysql?

Por ejemplo, para instalar el servidor mySql, usaré yum o apt para instalar tanto la herramienta de línea de comandos mysql como el servidor:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Habilite el servicio MySQL:

/sbin/chkconfig mysqld on

Inicie el servidor MySQL:

/sbin/service mysqld start

luego establezca la contraseña de root de MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

Espero que ayude.

Waqas
fuente
brew install mysql
Usé
2
Ya había instalado el cliente, el comando que necesitaba era que la sudo apt-get install mysql-servervida era buena
ErichBSchulz
1
¿No es la salida Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) del cliente? Es el cliente que intenta y no se conecta, ¿verdad? (Creo que la pregunta original necesita edición para aclarar eso).
msouth
76

Una solución rápida que funcionó para mí: intente usar la dirección IP local (127.0.0.1) en lugar de 'localhost' en mysql_connect (). Esto "obliga" a php a conectarse a través de TCP / IP en lugar de un socket Unix.

Maurizio
fuente
Funcionó ... pero ¿por qué? ¿MySQL no se resuelve localhosty obtiene de 127.0.0.1todos modos antes de siquiera intentar conectarse?
Jaime Hablutzel
3
no ... cuando usas localhost no estás usando un Internet Socket. Estás utilizando un zócalo IPC. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1 es loopback local, lo que significa que la solicitud no saldrá de su máquina, pero utilizará TCP / IP, por lo que será más lenta ...
Master Yogurt
A mí también me funciona. Estoy en ubuntu 14.04, hhvm y nginx.
Maykonn
1
Gracias. esto funciona para mí, pero no me queda claro por la respuesta cuál es la solución
Nathan Buesgens
Esto también es necesario cuando se conecta al servidor remoto a través de un túnel ssh
Tamm
51

Tuve el siguiente error

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Intenté varias formas y finalmente lo resolvió de la siguiente manera

sudo gksu gedit /etc/mysql/my.cnf

modificado

#bind-address       = 127.0.0.1

a

bind-address        = localhost

y reiniciado

sudo /etc/init.d/mysql restart

funcionó

AnupRaj
fuente
Tuve un problema similar; se trasladó de ethernet (192.168.220.11) a wifi (192.168.220.12) pero tenía la dirección de enlace codificada en IP de ethernet. Cambiando para localhostarreglarlo.
Chris G
30

Asegúrese de estar ejecutando mysqld: /etc/init.d/mysql start

Zorayr
fuente
3
O sudo service mysql start|restartpara Ubuntu.
Wtower
18

Para evitar que ocurra el problema, debe realizar un apagado correcto del servidor desde la línea de comandos en lugar de apagarlo.

shutdown -h now

Esto detendrá los servicios en ejecución antes de apagar la máquina.

Basado en Centos, un método adicional para recuperarlo nuevamente cuando se encuentra con este problema es mover mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Reiniciar el servicio crea una nueva entrada llamada mqsql.sock

Ali Hashemi
fuente
14

Recibí este error cuando configuré el trabajo cron para mi archivo. Cambié los permisos de archivo a 777 pero todavía no funcionó para mí. Finalmente obtuve la solución. Puede ser que sea útil para otros.

Prueba con este comando:

mysql -h 127.0.0.1 -P 3306 -u root -p

Recuerde que -h significa host , -P significa puerto y -p significa contraseña.

Doulat Khan
fuente
Forzar una conexión a través de TCP / IP en lugar de usar un socket es ineficiente (y requiere que active el soporte local TCP / IP en el servidor, según esta respuesta anterior ). La respuesta aceptada de 2011 es mejor: configure el servidor para que pueda usar un socket correctamente.
Quentin
10
-pno significa puerto , significa contraseña , lo has confundido con-P
Quentin
Esto parece ser, más o menos, una copia de esta respuesta anterior
Quentin
Para mí solo era cuestión de definir el host correcto: mysql -h 127.0.0.1 -u root -p
kghbln
12

Como se puede ver en las muchas respuestas aquí, hay muchos problemas que pueden provocar este mensaje de error cuando inicia el servicio MySQL. La cuestión es que MySQL generalmente le dirá exactamente lo que está mal, si solo busca en el archivo de registro apropiado.

Por ejemplo, en Ubuntu, debe verificar /var/log/syslog. Debido a que muchas otras cosas también podrían estar iniciando sesión en este archivo, probablemente desee usar greppara ver los mensajes de mysql y tailver solo los más recientes. Todos juntos, eso podría verse así:

grep mysql /var/log/syslog | tail -50

No haga cambios a ciegas en su configuración porque alguien más dijo 'Esto funcionó para mi sistema'. Averigua qué está realmente mal con tu sistema y obtendrás un mejor resultado mucho más rápido.

matt2000
fuente
55
+1 Por dar un paso atrás y señalar algo que muchas de las otras respuestas no tienen en cuenta: que ver lo que la aplicación podría haber informado como un problema es un enfoque mucho mejor que apresurarse ciegamente y hacer cambios que pueden no incluso ser aplicable ...!
SlySven
Ah, entonces está usando el mal .cnf. Eso lo explica. Ahora puedo dejar de intentar cosas al azar y abordar el problema real. Gracias.
Synetech
11

Otra solución es editar /etc/my.cnf e incluir el host en la sección [cliente]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

Y luego reiniciando el servicio mysql.

Esta solución se probó en: Versión del servidor: 5.5.25a-log Distribución de origen

la sombra
fuente
Se recomienda agregar la sección [cliente] si aún no está en my.cnf
Cris
7

Tuve el mismo problema y fue causado por una actualización de los controladores mysql cuando se estaba ejecutando el servidor mysql. Lo arreglé simplemente reiniciando mysql y apache2:

servicio de sudo mysql stop

servicio de sudo mysql start

servicio de sudo apache2 stop

servicio sudo apache2 inicio

fustaki
fuente
En mi caso, mysqlno estaba corriendo. Corrí sudo service mysql startdespués de correr sudo service mysql statuspara verificar que no estaba corriendo.
Tass
6

En mi caso, estaba usando Centos 5.5. Descubrí que el problema se debía a que el servicio mysql se detuvo de alguna manera. Entonces comencé el servicio mysql con el comando:

 /etc/init.d/mysqld start

Entonces ... error tonto.

Shyamkkhadka
fuente
6

Si todo funcionó bien y acaba de comenzar a ver este error, antes de hacer cualquier otra cosa, asegúrese de no quedarse sin espacio en disco:

df -h

Si el volumen donde se crea mysql.sock está al 100% de uso, MySql no podrá crearlo y esta será la causa de este error. Todo lo que necesita hacer es eliminar algo que no es necesario, como archivos de registro antiguos.

Derek Gogol
fuente
6

intente con -h (host) y -P (puerto):

mysql -h 127.0.0.1 -P 3306 -u root -p

Ramil Mammadov
fuente
5
sudo service mysql start

Esto debería servirte bien. Es posible que haya cambiado algunos comandos que afectaron las configuraciones de mysql.

shimanyi
fuente
o systemctl start mariadb.serviceen Fedora 22 o RedHat 7. Después de eso, es posible establecer la contraseña de root.
Junior Mayhé
5

Hay muchas soluciones a este problema, pero para mi situación, solo necesitaba corregir la FECHA en la máquina / servidor (Servidor Ubuntu 16.04 ).

i) Verifique la fecha de su servidor y corríjala.

ii) Ejecutar sudo /etc/init.d/mysql restart

Eso debería comenzarlo.

Huey Mataruse
fuente
4

Recibí el error porque estaba ejecutando MAMP y mi archivo .sock estaba en una ubicación diferente. Acabo de agregar un enlace simbólico donde la aplicación pensó que debería ser lo que señalaba dónde estaba realmente y funcionó a las mil maravillas.

Devin Henkel-Legare
fuente
¿Cómo puede agregar un enlace simbólico donde la aplicación pensó que debería apuntar a donde realmente estaba?
Gilberto Ibarra
4

También descubrí que este era un problema de permisos. Comparé los archivos de MySQL con una instalación que funciona (tanto en Debian 6 squeeze) y tuve que hacer los siguientes cambios de propiedad (donde mydatabasehay alguna base de datos que tenga).

Propiedad mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Propiedad mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Propiedad mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 
SharpC
fuente
4

Para mí, esto fue simplemente un caso de MySQL que tardó mucho en cargar. Tengo más de 100,000 tablas en una de mis bases de datos y eventualmente comenzó pero obviamente tiene que tomar mucho tiempo en este caso.

Antonio
fuente
3

Si está utilizando la versión Micro de AWS (Amazon Web Services), entonces es un problema de memoria. Cuando corrí

mysql

desde la terminal diría

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)

Así que intenté lo siguiente y simplemente fallaría.

service mysqld restart

Después de mucho buscar, descubrí que tienes que crear un archivo de intercambio para que MySQL tenga suficiente memoria. Las instrucciones se enumeran: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

Entonces, pude reiniciar mysqld.

jth_92
fuente
Tuve el mismo problema en la instancia "micro" del servidor de AWS y puedo confirmar que al hacer el archivo de intercambio se solucionó el "ERROR 2002 (HY000): no se puede conectar al servidor MySQL local a través de socket / var / run / mysqld / mysqld .sock '(111) "problema. Gracias @ jth_92!
Konaras
3

siempre puede iniciar el servidor mysql especificando la ubicación del archivo mysql.sock usando la --socketopción como

mysql --socket=/var/mysql/mysql.sock 

Esto funcionará incluso si la ubicación del archivo de socket se especifica en una ubicación diferente en el archivo my.cnf.

David Okwii
fuente
3

Para aquellos cuya solución no funcionó, intente:

cd /etc/mysql

compruebe si my.cnf está presente

nano my.cnf

y asegúrese de tener solo una dirección de enlace de la siguiente manera:

dirección-enlace = 127.0.0.1

Si no, ese podría ser el problema, simplemente salga de nano y guarde el archivo.

y service mysql start

tenga en cuenta que si no tiene nano (es un editor de texto) simplemente instálelo apt-get install nanoy, una vez, presione Ctrl + X para salir, no olvide decir Y para guardar y usar el mismo archivo)

Jack M.
fuente
Desafortunadamente esto no funcionó. Esto básicamente dice que solo la máquina local puede acceder a mysql. No hay conexiones remotas.
Stephen
3

También tuve este problema al intentar iniciar el servidor, muchas de las respuestas aquí que solo dicen que iniciar el servidor no funcionaron. Lo primero que puede hacer es ejecutar lo siguiente para ver si hay algún error de configuración:

/usr/sbin/mysqld --verbose --help 1>/dev/null

Tuve un error que apareció:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Un simple grep -HR "innodb-online-alter-log-max-size" /etc/mysql/me mostró exactamente qué archivo contenía la línea ofensiva, así que eliminé esa línea del archivo.

Luego, revisando mi /var/log/mysql/error.logarchivo tenía:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

En base a esta pregunta, la solución aceptada no funcionaría porque ni siquiera podía iniciar el servidor, así que seguí lo que decían algunos de los comentarios y eliminé mi /var/lib/mysql/ib_logfile0y/var/lib/mysql/ib_logfile1 archivos.

Esto permitió que el servidor se iniciara y pude conectarme y ejecutar consultas, sin embargo, al verificar mi archivo de registro de errores, se estaba llenando rápidamente con varias decenas de miles de líneas como esta:

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Basado en una sugerencia de aquí , para arreglar esto hice un mysqldump y restauré todas las bases de datos (vea el enlace para otras soluciones).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Todo parece estar funcionando como se esperaba ahora.

Miguel
fuente
La comprobación /var/log/mysql/error.logayudó en mi caso. Hubo una solución[ERROR] Can't init tc log rápida con la siguiente respuesta: dba.stackexchange.com/a/185006/163583
Juraj.Lorinc
2

Agregando

--protocol=tcp 

a la lista de pramistas en su conexión funcionó para mí.

Barryred
fuente
2

Esto fue lo suficientemente bueno para mi

sudo /etc/init.d/mysql restart
Vikram
fuente
2

Me encontré con este problema hoy. Ninguna de estas respuestas proporcionó la solución. Tenía que hacer los siguientes comandos (que se encuentran aquí https://stackoverflow.com/a/20141146/633107 ) para que mi servicio mysql se inicie:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Esto se indicó en parte por los siguientes errores en /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

También vi el error completo del disco, pero solo cuando ejecuté comandos sin sudo. Si la verificación de permisos falla, informa que el disco está lleno (incluso cuando su partición ni siquiera está casi llena).

Splaktar
fuente
2

CentOS 7, 64 bits. Instalación nueva.
En mi caso, el error se debió a que no tenía instalado el servidor MySQL y el cliente MySQL correctos.
Utilizando yum, mariadbeliminé una edición mysql-community. Descargué las rpm para el cliente y el servidor del sitio web oficial de MySQL e instalé el servidor y el cliente.

Al instalar el servidor, se me mostró un mensaje de que la contraseña de la cuenta raíz de MySQL estaba almacenada en un archivo que podía ver sudo cat /root/.mysql_secret.

Entonces, después de instalar el cliente y el servidor, verifiqué si MySQL estaba funcionando (creo que reinicié antes de hacerlo) con el comando sudo service mysql status y obtuve el resultado.

MySQL en ejecución (2601) [OK]

Ingresé a MySQL usando la contraseña del archivo .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf . Tenga en cuenta que dxM01Xfg3DXEPabpfes la contraseña mencionada en el archivo .mysql_secret.

y luego ingresó el siguiente comando en el indicador de mysql para cambiar la contraseña de root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

Todo funcionó bien desde entonces.

Nav
fuente
1
mismo caso en RHEL6U6 con versión de servidor: 5.6.23-enterprise-commercial-advanced.
El HCD
2
sudo service mysqld start

Trabajó para mí, estoy usando Centos

ikuchris
fuente
2

Esto no responde directamente a su pregunta, sino un subconjunto, es decir, el uso de PythonAnywhere. Seguí tropezando con esta pregunta cuando buscaba una solución, así que la agregué aquí con la esperanza de que ayude a otros en mi situación.


PythonAnywhere decidió cambiar los nombres de host de conexión de la base de datos para mejorar la eficiencia y la confiabilidad, como se detalla aquí :

El nombre oficial de acogida se debe utilizar para conectarse a su cuenta de instancia de base de datos MySQL ha cambiado de mysql.server a sunombredeusuario .mysql.pythonanywhere-services.com . Esto pasa por alto una parte de nuestra infraestructura que ha comenzado a mostrar problemas en las últimas semanas, y debería ser mucho más eficiente y confiable que en el pasado.

Por lo tanto, deberá actualizar su nombre de host al valor resaltado anteriormente.

Vlad Schnakovszki
fuente
1

Tuve este error de socket y básicamente se redujo al hecho de que MySQL no se estaba ejecutando. Si ejecuta una instalación nueva, asegúrese de instalar 1) el paquete del sistema y 2) el instalador del panel (mysql.prefPane). El instalador del panel le permitirá ir a las Preferencias de su Sistema y abrir MySQL, y luego ejecutar una instancia.

Tenga en cuenta que, en una instalación nueva, necesitaba restablecer mi computadora para que los cambios surtan efecto correctamente. Después de un reinicio, obtuve una nueva instancia ejecutándose y pude abrir una conexión a localhost sin ningún problema.

También es de destacar que aparentemente tenía instaladas versiones anteriores de MySQL, pero había eliminado el panel, lo que facilita la ejecución de una instancia de MySQL para usuarios de Mac.

Un buen enlace para este proceso de reinstalación: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

tandy
fuente