Como passei bastante tempo tentando resolver isso e sempre voltei a esta página ao procurar esse erro, deixarei minha solução aqui esperando que alguém economize o tempo que perdi. Embora no meu caso eu esteja usando o mariadb em vez do MySql, você ainda pode adaptar esta solução às suas necessidades.
Meu problema
é o mesmo, mas minha configuração é um pouco diferente (mariadb em vez de mysql):
Mariadb instalado com homebrew
$ brew install mariadb
Iniciou o daemon
$ brew services start mariadb
Tentei conectar e recebi o erro mencionado acima
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Minha solução
descobrir quais my.cnf
arquivos são usados por mysql
(como sugerido neste comentário ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
verifique onde o arquivo de soquete Unix está sendo executado (quase como descrito aqui ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(você pode querer em grep mysql
vez de mariadb)
Adicione o arquivo de soquete que você encontrou ~/.my.cnf
(crie o arquivo se necessário) (presumindo que ~/.my.cnf
foi listado ao executar o mysql --verbose ...
comando acima):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Reinicie o seu mariadb:
$ brew services restart mariadb
Depois disso, pude executar o mysql e obter:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Então, eu executo o comando com privilégios de superusuário em vez disso e depois de inserir minha senha, obtive:
$ sudo mysql -uroot
MariaDB [(none)]>
Notas:
Não tenho certeza sobre os grupos onde você deve adicionar o soquete, primeiro eu tinha [cliente-servidor], mas depois percebi que [cliente] deveria ser o suficiente. Então eu mudei e ainda funciona.
Ao correr mariadb_config | grep socket
eu obtenho: o
--socket [/tmp/mysql.sock]
que é um pouco confuso, pois parece que /usr/local/mariadb/data/mariadb.sock
é o lugar real (pelo menos na minha máquina)
Gostaria de saber onde posso configurar o /usr/local/mariadb/data/mariadb.sock
para realmente estar /tmp/mysql.sock
para que possa usar as configurações padrão em vez de ter que editar o meu .my.cnf
(mas estou muito cansado agora para descobrir isso ...)
Em algum momento, também fiz coisas mencionadas em outras respostas antes de chegar a isso.