Поскольку я потратил довольно много времени, пытаясь решить эту проблему, и всегда возвращался на эту страницу, когда искал эту ошибку, я оставлю свое решение здесь, надеясь, что кто-то сэкономит время, которое я потерял. Хотя в моем случае я использую mariadb, а не MySql, вы все равно можете адаптировать это решение под свои нужды.
Моя проблема
то же самое, но мои настройки немного отличаются (mariadb вместо mysql):
Установил mariadb с homebrew
$ brew install mariadb
Запустил демон
$ brew services start mariadb
Пытался подключиться и получил указанную выше ошибку
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Мое решение
узнайте, какие my.cnf
файлы используются mysql
(как предлагается в этом комментарии ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
проверьте, где запущен файл сокета Unix (почти как описано здесь ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(вы можете захотеть grep mysql
вместо mariadb)
Добавьте найденный вами файл сокета ~/.my.cnf
(при необходимости создайте файл) (при условии, что он ~/.my.cnf
был указан при запуске mysql --verbose ...
команды сверху):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Перезагрузите свой mariadb:
$ brew services restart mariadb
После этого я смог запустить mysql и получил:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Поэтому я запускаю команду с привилегиями суперпользователя и после ввода пароля получил:
$ sudo mysql -uroot
MariaDB [(none)]>
Ноты:
Я не совсем уверен насчет групп, в которые нужно добавить сокет, сначала у меня был [клиент-сервер], но потом я решил, что [client] должно быть достаточно. Я изменил его, и он все еще работает.
При запуске mariadb_config | grep socket
я получаю:
--socket [/tmp/mysql.sock]
что немного сбивает с толку, поскольку кажется, что /usr/local/mariadb/data/mariadb.sock
это реальное место (по крайней мере, на моей машине)
Интересно, где я могу настроить /usr/local/mariadb/data/mariadb.sock
его /tmp/mysql.sock
так, чтобы я мог использовать настройки по умолчанию вместо того, чтобы редактировать мои .my.cnf
(но я слишком устал, чтобы понять это ...)
В какой-то момент я также делал то, что упоминалось в других ответах, прежде чем придумать это.