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.cnf
archivos 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 mysql
lugar de mariadb)
Agregue el archivo de socket que encontró ~/.my.cnf
(cree el archivo si es necesario) (asumiendo que ~/.my.cnf
estaba 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:
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.
Cuando ejecuto mariadb_config | grep socket
obtengo: lo
--socket [/tmp/mysql.sock]
cual es un poco confuso ya que parece que /usr/local/mariadb/data/mariadb.sock
es el lugar real (al menos en mi máquina)
Me pregunto dónde puedo configurar el /usr/local/mariadb/data/mariadb.sock
realmente /tmp/mysql.sock
para poder usar la configuración predeterminada en lugar de tener que editar mi .my.cnf
(pero ahora estoy demasiado cansado para darme cuenta ...)
En algún momento, también hice las cosas mencionadas en otras respuestas antes de pensar en esto.