由于我花了很多时间尝试解决此问题,并且在查找此错误时总是返回此页面,因此我将解决方案留在这里,希望有人可以节省我失去的时间。尽管就我而言,我使用的是mariadb而不是MySql,但您仍然可以根据自己的需求调整此解决方案。
我的问题
是相同的,但是我的设置有点不同(用mariadb代替mysql):
用自制软件安装mariadb
$ 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 ...
-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)]>
笔记:
我对必须在何处添加套接字的组不太确定,首先我有[client-server],但后来我认为[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
(但是现在我太累了,无法找出答案...)
在提出这一点之前,我有时还会做其他答案中提到的事情。