Оскільки я витратив досить багато часу, намагаючись вирішити це питання, і завжди повертався на цю сторінку, шукаючи цю помилку, я залишу тут своє рішення, сподіваючись, що хтось заощадить час, який я втратив. Хоча в моєму випадку я використовую мариадб, а не MySql, ви все-таки зможете адаптувати це рішення під свої потреби.
Моя проблема
те саме, але моя настройка трохи інша (mariadb замість mysql):
Встановлено маріадб з домашньою картоплею
$ 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
замість мариадби)
Додайте файл сокету, який ви знайшли ~/.my.cnf
(створіть файл, якщо необхідно) (припустимо, що він ~/.my.cnf
був перелічений під час запуску mysql --verbose ...
-command зверху):
[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)]>
Примітки:
Я не зовсім впевнений у групах, куди потрібно додати сокет, спершу у мене був це [клієнт-сервер], але потім я зрозумів, що [клієнт] повинен вистачити. Тож я його змінив і він все ще працює.
Під час бігу 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
(але я занадто втомився зараз, щоб зрозуміти це ...)
У якийсь момент я також робив речі, згадані в інших відповідях, перш ніж придумати це.