No se puede conectar al servidor MySQL local a través de socket homebrew


109

Recientemente intenté instalar MySQL con homebrew ( brew install mysql) y cuando intento ejecutarlo, aparece el siguiente error:

ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/tmp/mysql.sock' (2)

No hay /tmp/mysql.sockni un /var/lib/mysql.sock.

He buscado y no he encontrado ningún mysql.sockarchivo.

¿Cómo puedo arreglar esto?


Puede ver este enlace la respuesta de GeekHades. stackoverflow.com/questions/4847069/…
GeekHades

He instalado mysql y tuve el mismo problema después de que la batería de mi computadora portátil se agotó y forcé un apagado incompleto. Vale la pena ejecutarlo mysqldpara verificar las cosas y asegurarse de que MySQL se apagó correctamente la última vez. Si tuvo un apagado "sucio" (por ejemplo, si la batería de una computadora portátil fuerza el apagado del sistema), esto debería limpiarlo. A continuación, puede iniciar el servidor MySQL de nuevo: mysql.server start.
Dave Everitt

1
Esta respuesta funcionó para mí: stackoverflow.com/a/6378429/2641861
ArnoHolo

Esto ocurrió después de restaurar una nueva Mac Mini desde una copia de seguridad de Time Machine. Tuve que desinstalar mysql@5.7 y reinstalarlo para que comenzara a funcionar. Mordió un martillo, pero fue relativamente indoloro ya que se conservaron todas mis configuraciones.
Joshua Pinter

Respuestas:


93

Cuando tienes el servidor funcionando a través de

mysql.server start

debería ver el socket en /tmp/mysql.sock . Sin embargo, el sistema parece esperarlo en /var/mysql/mysql.sock . Para solucionar esto, debe crear un enlace simbólico en / var / mysql :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Esto me lo resolvió. Ahora mi phpMyAdmin funciona felizmente con localhost y 127.0.0.1 .

El crédito es para Henry


1
Esto también resolvió mi problema con Wordpress que no se conectaba a mySQL. Gracias de nuevo
Ayoub

20
Cuando lo intento, mysql.server startlo consigo ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Necesitaba una versión anterior de MySQL, instalada a través de brew install mysql@5.6.
Liron Yahdav

3
corriendo. mysql.server startme lo
arregló

@Liron, ¿solucionaste el problema al que te enfrentas? Estoy enfrentando el mismo problema sin ayuda.
Buddy

@EB ha pasado un tiempo desde que tuve este problema, pero mirando hacia atrás en mi comentario, ¿probó la solución para instalar una versión anterior de MySQL? Aparte de eso, desafortunadamente no tengo ideas.
Liron Yahdav

61

Parece que su servidor mysql no está iniciado. Normalmente ejecuto el comando de parada y luego lo inicio de nuevo:

mysqld stop
mysql.server start

Mismo error, y esto funciona para mí.


89
. ¡ERROR! El servidor se cerró sin actualizar el archivo PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Hice mysqld &un comentario anterior, pero creo que probablemente haría lo mismo, ya mysqld stop que estoy bastante seguro de que en mi caso se debió a un apagado incorrecto.
Mitch VanDuyn

54

Me quedaron algunos directorios de otra instalación de mysql (8.0), que no se eliminaron.

Resolví esto haciendo lo siguiente:

Primero desinstale mysql

brew uninstall mysql@5.6

Eliminar las carpetas / archivos que no se eliminaron

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Reinstale mysql y vincúlelo

brew install mysql@5.6
brew link --force mysql@5.6

Habilitar e iniciar el servicio

brew services start mysql@5.6

3
Muchas gracias :) Todas las instrucciones fallaron, pero la suya
Vyacheslav Loginov

1
Gracias - esta respuesta terminó 24 horas de cabeza golpeando contra una pared
vladiim

1
¡Esto también funcionó para mí después de probar todo lo demás! ¡¡¡¡Gracias!!!! :)
Eric

1
Parece que el problema para mí era que todavía tenía / usr / local / var / mysql después de una instalación anterior. ¡Eliminar hizo el truco! Gracias por tu sugerencia.
themantimes8

Necesitaba ejecutar el paso "mysql_secure_installation" mencionado por homebrew antes de que desapareciera este error.
Searaig

27

Intente conectarse usando "127.0.0.1" en lugar de "localhost".


2
@Esteban MySQL intentará conectarse al socket Unix si le dice que se conecte a "localhost". Si le dice que se conecte a 127.0.0.1, lo está forzando a conectarse al enchufe de red. Entonces, probablemente tenga MySQL configurado para escuchar solo el socket de red y no el socket del sistema de archivos. (Fuente: serverfault.com/a/295300/59101 )
Ardee Aram

Esto me ayudó a forzar al cliente mysql a usar el socket TCP, ya que estoy ejecutando un túnel SSH en localhost a mi base de datos MySQL remota.
Iow

22

1) Si puede ver "mysql detenido" cuando ejecuta el siguiente comando;

brew services list

2) y si puede iniciar mysql con el siguiente comando;

mysql server start

esto significa; mysql puede iniciarse manualmente, pero no se inicia automáticamente cuando se inicia el sistema operativo. Agregar mysql a los servicios solucionará este problema. Para hacerlo, puede ejecutar el siguiente comando;

brew services start mysql

Después de eso, puede reiniciar su sistema operativo e intentar conectarse a mysql para ver si se inició automáticamente. Hice lo mismo y dejé de recibir el siguiente error;

ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/tmp/mysql.sock' (2)

Espero que esto ayude.


@berk, en mi caso me ayudó a recuperar el error, pero me generó otro error 'ERROR 1045 (28000): acceso denegado para el usuario' usuario '@' localhost '(usando contraseña: NO)'
Pratik Khadka

Hola @PratikKhadka, el error que está recibiendo ahora significa que mysql se está ejecutando y tiene un problema de autenticación. De acuerdo con el mensaje de error que publicó, está usando un nombre de usuario como 'usuario' y sin contraseña. Debe utilizar un nombre de usuario y una contraseña válidos. Le sugiero que consulte el siguiente enlace; " forums.mysql.com/read.php?34,140320,140324 "
Berk

No es necesario reiniciar el sistema operativo, simplemente ejecutar "brew services start mysql" funcionó para mí. ¡Gracias!
AKS

Hola @AKS, tienes razón. No es necesario reiniciar para que funcione. Edité la respuesta para explicar por qué es necesario reiniciar. Es necesario para ver si mysql se inicia automáticamente cuando se inicia el sistema operativo. ¡Gracias por los comentarios!
Berk

5

El archivo /tmp/mysql.sockes probablemente un Named-Pipe, ya que está en una carpeta temporal. Una tubería con nombre es un archivo especial que nunca se almacena de forma permanente.

Si creamos dos programas y queremos que un programa envíe un mensaje a otro programa, podríamos crear un archivo de texto. Tenemos un programa que escribe algo en el archivo de texto y el otro programa lee lo que escribió nuestro otro programa. Eso es lo que es una tubería, excepto que no escribe el archivo en el disco duro de nuestra computadora, IE no almacena permanentemente el archivo (como hacemos cuando creamos un archivo y lo guardamos).

Un enchufe es exactamente lo mismo que una tubería. La diferencia es que los sockets se usan generalmente en una red, entre computadoras. Un Socket envía información a otra computadora o recibe información de otra computadora. Tanto Pipes como Sockets utilizan un archivo temporal para compartir de modo que puedan "comunicarse".

Es difícil discernir cuál está usando MySql en este caso. Aunque no importa.

El comando mysql.server startdebe hacer que el 'servidor' (programa) ejecute su bucle infinito que creará ese archivo especial y esperará los cambios ( listenpara las escrituras).

Después de eso, un problema común podría ser que el programa MySql no tenga permiso para crear un archivo en su máquina, por lo que es posible que deba otorgarle privilegios de root.

sudo mysql.server start

Esto funcionó muy bien, gracias. Simplemente ejecuté mysql.server start, mysql.server stopy luego volví a poner en marcha el servicio a través de Homebrew brew services start mysql@5.7y todo salió bien.
taylorthurlow

4

Después de instalar macos mojave, tuve que limpiar la carpeta mysql debajo /usr/local/var/mysqly luego reinstalar a través de, de lo brew install mysqlcontrario, las cosas relacionadas con el permiso aparecerían por todas partes.


Resolví mi problema con su respuesta, había instalado previamente mysql y luego intenté degradar a mysql@5.6
Rodrirokr

Gracias amigo. también resolvió mi problema. eliminar / usr / local / var / mysql y reinstalar fue una solución para mí.
Oğuz Can Sertel

1
Cuidado: al eliminar /usr/local/var/mysql, también se eliminarán todas las bases de datos existentes.
Leonardo

3

Recibí el mismo error y esto es lo que me ayudó:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Solo para agregar a estas respuestas, en mi caso no tenía un servidor mySQL local, se estaba ejecutando dentro de un contenedor docker. Por lo tanto, el archivo de socket no existe y no será accesible para el cliente "mysql".

El archivo sock es creado por mysqld y mysql lo usa para comunicarse con él. Sin embargo, si su servidor mySql no se está ejecutando localmente, no necesita el archivo sock.

Al especificar un nombre de host / ip, el archivo sock no es necesario, por ejemplo

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Como pasé bastante tiempo tratando de resolver esto y siempre volvía a esta página cuando buscaba este error, dejaré mi solución aquí con la esperanza de que alguien ahorre el tiempo que he perdido. Aunque en mi caso estoy usando mariadb en lugar de MySql, es posible que aún pueda adaptar esta solución a sus necesidades.

Mi problema

es el mismo, pero mi configuración es un poco diferente (mariadb en lugar de mysql):

Mariadb instalado con homebrew

$ brew install mariadb

Inició el demonio

$ brew services start mariadb

Intenté conectarme y obtuve el error mencionado anteriormente

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Mi solución

averigüe qué my.cnfarchivos utilizan mysql(como se sugiere en este comentario ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

compruebe dónde se está ejecutando el archivo de socket Unix (casi como se describe aquí ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(es posible que desee en grep mysqllugar de mariadb)

Agregue el archivo de socket que encontró ~/.my.cnf(cree el archivo si es necesario) (asumiendo que ~/.my.cnfestaba en la lista al ejecutar el mysql --verbose ...comando -comando desde arriba):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Reinicie su mariadb:

$ brew services restart mariadb

Después de esto, pude ejecutar mysql y obtuve:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Entonces ejecuto el comando con privilegios de superusuario y después de ingresar mi contraseña obtuve:

$ sudo mysql -uroot
MariaDB [(none)]>

Notas:

  1. No estoy muy seguro de los grupos en los que debe agregar el socket, primero lo tenía [cliente-servidor] pero luego pensé que [cliente] debería ser suficiente. Así que lo cambié y todavía funciona.

  2. Cuando ejecuto mariadb_config | grep socketobtengo: lo --socket [/tmp/mysql.sock] cual es un poco confuso ya que parece que /usr/local/mariadb/data/mariadb.sockes el lugar real (al menos en mi máquina)

  3. Me pregunto dónde puedo configurar el /usr/local/mariadb/data/mariadb.sockrealmente /tmp/mysql.sockpara poder usar la configuración predeterminada en lugar de tener que editar mi .my.cnf(pero ahora estoy demasiado cansado para darme cuenta ...)

  4. En algún momento, también hice las cosas mencionadas en otras respuestas antes de pensar en esto.


2

Deberá ejecutarlo mysql_install_db; la forma más fácil es si se encuentra en el directorio de instalación:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Alternativamente, puede alimentar mysql_install_dbun basedirparámetro como el siguiente:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Enfrenté el mismo problema en mi mac y lo resolví siguiendo los siguientes tutoriales

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Pero no olvide eliminar o desinstalar la versión anterior antes de continuar.

Comandos:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Explique con algunos ejemplos breves cómo le ayudó el enlace que proporcionó. Los enlaces pueden desaparecer y, por lo tanto, esta puede ser una razón por la que su respuesta podría eliminarse.
Kurt Van den Branden

2

Después de reiniciar no pude conectarme con el mariadb local, una búsqueda también me llevó a esta página y quería compartir mi solución con ustedes.

Noté que falta el directorio my.cnf.d en / usr / local / etc /.

Este es un error conocido con homebrew que se describe y resuelve allí. https://github.com/Homebrew/homebrew-core/issues/36801

forma rápida de solucionarlo: mkdir /usr/local/etc/my.cnf.d


Esto funcionó para mí. No se pudo conectar al mariadb local después brew updatey reiniciar. brew services listel resultado mostraba el estado de mariadb starteden amarillo. Gracias por el consejo.
nterms

1

Al ejecutar mysql_secure_installation e ingresar la nueva contraseña, obtuve:


Error: no se puede conectar al servidor MySQL local a través del socket '/tmp/mysql.sock' (2)


Me di cuenta al intentar lo siguiente de esta respuesta :

netstat -ln | grep mysql

No devolvió nada, y supuse que eso significaba que no había un archivo .sock.

Entonces, agregué lo siguiente a mi archivo my.cnf (ya sea en /etc/my.cnf o en mi caso, /usr/local/etc/my.cnf ).

Debajo:

[mysqld]
socket=/tmp/mysql.sock

Debajo:

[client]
socket=/tmp/mysql.sock

Esto se basó en esta publicación .

Luego, detenga / inicie mysql nuevamente y vuelva a intentar mysql_secure_installation, que finalmente me permitió ingresar mi nueva contraseña de root y continuar con otras preferencias de configuración.

Espero que esto ayude a alguien. Hombre, odio estas cosas ...


0

solo para completar este hilo. por lo tanto, MAMP (PRO) se usa con bastante frecuencia

el camino aquí es

/Applications/MAMP/tmp/mysql/mysql.sock

0

Inicié mysql manualmente en el panel de preferencias del sistema al inicializar la base de datos y luego iniciarla. Esto resolvió mi problema.


0

En mi caso, el culpable se encontró en los archivos de registro:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Así que cambié el nombre ib_logfile0para deshacerme del error (tuve que hacer lo mismo ib_logfile1después).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Tuve el mismo problema. Después de probar todos estos métodos sin éxito, hice lo siguiente:

tail -f the-mysql-or-maria-db-error-file.err

en otra consola:

brew services restart mariadb

Vi el siguiente error:

"Error en la recuperación de fallos de MAC HOMEBREW. Corrija el problema (si es, por ejemplo, un error de falta de memoria) y reinicie, o elimine el registro de tc e inicie mysqld con"

Así que cambié la tc.logextensión tc.log.txty reinicié mariadb

brew services restart mariadb

¡y hecho!



0

Para mí, lo había instalado hace mariadbmucho tiempo, luego lo instalé mysql@5.7.

Cuando ejecuté mysql -uroot, aparece el error: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Leyendo las respuestas:

  • Yo desinstalé mariadb
  • Eliminó la carpeta /usr/local/var/mysql
  • Ejecutó el comando mysqld --initialize

Entonces pude mysql -uroot -p


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.