无法通过套接字'/tmp/mysql.sock'(2)连接到本地MySQL服务器


143

我已经安装了MySQL服务器并尝试连接到它,但是出现错误:

    Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

我已经检查了我的/ tmp目录,并且没有mysql.sock。我在任何地方都找不到mysql.sock。我读到它可能在

    /var/lib/mysql/mysql.sock

但是我也检查了那里,甚至没有mysql目录,在/ lib中只有一些后缀。有人可以帮我解决这个问题吗?


2
我正在Mac OS X上工作
user3344382

您好,您可以粘贴正在使用的连接命令吗?您还启动了MySQL吗?
Mark Butler

@MarkButler我正在使用以下命令:/ usr / local / mysql / bin / mysql
user3344382 2014年

是的,只是服务器没有运行。但是,我仍然无法理解mysql.sock在哪里,可能还有其他隐藏的地方吗?
user3344382 2014年

此错误非常普遍,并且可能有多种原因。对于一个简要的概括在这里看到:medium.com/@7anac/...
Janac米娜

Answers:



61

更新OS X Yosemite之后,我遇到了同样的问题,解决方法非常简单,请检查系统偏好设置-> mysql,状态为STOP。只需重新启动它,它现在就可以在我的Mac上正常工作。


1
多亏了这么简单的@keren,我在整个my.cnf文件中更改设置浪费了整整45分钟,而这始终是唯一的问题。
kandroidj 2015年

也为我工作,谢谢,对DMG安装没有任何想法。
Rameshwar Vyevhare '16

不幸的是,这并没有帮助我
simhumileco

简单又棒!
Desmond DAI

6
嗯什么?为什么OSX的系统偏好设置具有MySQL选项?
AlxVallejo

45

对于MAMP

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

https://coderwall.com/p/w5kwzw/solved-can-t-connect-to-local-mysql-server-through-socket-tmp-mysql-sock

更新:每次我的计算机重新启动时,我都必须输入此命令,因此我创建了一个快捷方式。

在终端类型中执行以下操作:

~: vi ~/.profile

alias ...='source ~/.profile'
alias sockit='sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock'

保存。

在终端类型中:

~: ... 源.profile配置。

现在在终端中,您只需输入

~: sockit

1
太棒了 只是我一直在寻找的解决方案。
JoshHighland'3

1
我已经多次回到这篇文章,它总是有效的。
Trey Copeland'3

在MAMP之外升级到mysql 5.7.1并遇到错误。这为我修复了问题
David

如果您使用的是Mac书,并且可以进行MAMP,则可以使用
kelrob-dev,

32

以下命令解决了我的问题:

sudo chown -R _mysql:mysql /usr/local/var/mysql

sudo mysql.server start

1
搜索3个小时后,这解决了我的问题。我只是通过homebrew安装了mysql,brew install mysql但是homebrew告诉我的所有命令都无法正常运行。这使每个问题都消失了……谢谢!您写的第一行到底是什么?这是什么意思?
mesqueeb '16

谢谢,工作正常!
Nirojan Selvanathan

1
对我来说是:sudo chown -R _mysql:mysql / usr / local / mysql / data
Junaid Bhura

chown -R递归更改所有者-R
Hos Mercury

原始版本10.13.1和自制软件在安装mariadb(10.2.10)时出现此错误。此所有者更改已修复,因此现在sudo brew services start mariadb也可以在启动时启动mariadb(而不仅仅是在登录时)。好极了!谢谢!
iggie

16

尝试所有解决方案后,仅在指定主机后才对我有用

mysql -u root -p -h127.0.0.1

要求输入密码时

Enter password:

按Enter

如果上面的一切正常的话,它将奏效。


2
我使用Docker for Mac将docker容器设置为mysql,并将其3306端口映射到Mac。如果不添加-h 127.0.0.1,它总是提示Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2); 添加参数后,它可以很好地工作。
艾薇·宋

1
我认为这是因为通过127.0.0.1不会使用套接字。更多狭窄的解决方法。
卢卡斯·摩根

1
mysql -u root -h127.0.0.1 没有-p标志的情况下运行对我有用,因为当我安装MySQL时,我从未运行过该mysql_secure_installation命令。我的理解是,在这种情况下,安装默认为不需要密码。
Richie Thomas

1
像魅力一样工作!
Panduka DeSilva,

10

在奋斗了几个小时之后,唯一起作用的是

sudo mysql.server start

然后使用

mysql_secure_installation 

然后通过连接到数据库

mysql -uroot -p

通过自制软件安装MySQL,版本为

Server version: 5.7.21 Homebrew

指定版本可能会有所帮助,因为解决方案可能会因版本而异。


9

在进行/etc/my.cnf以下更改的mysql配置文件中,然后重新启动mysqlddameon进程

[client]
socket=/var/lib/mysql/mysql.sock

还要检查此相关线程

无法通过套接字'/tmp/mysql.sock连接到本地MySQL服务器


/ etc目录中没有my.cnf文件。我想我可以手动创建该文件,但是正如我说的那样,/ var / lib中没有mysql目录,套接字怎么存在?
user3344382 2014年

检查我发布的相关线程,以及检查您的mysql服务器是否正在实际运行。
拉胡尔2014年

我在/etc/mysql/my.cnf
Devon

如果您安装了brew,则需要/tmp/mysql.sock用作袜子的位置
M.academy在18年

8

以下解决了我的问题:

检查您的MySQL服务器在哪里列出:netstat -nlp如果它在列出TCP,则在连接到数据库而不是“ localhost”时使用127.0.0.1

在此处检查MySQL文档


这似乎为我工作,并证明mysql还活着,但为什么我不能连接到本地套接字?
Colin D

8

试试这个对我有用。

须藤/usr/local/mysql/support-files/mysql.server start


为什么走这条路?同时使用“ mysql在哪里”命令(MAC OS)给出输出/ usr / local / mysql / bin /。如何在Mac中识别此路径?
Vineeth Bhaskaran,

是的,路径相应地发生了变化
vasanth vasu

4

如果您在Mac OS X中使用XAMPP并已将MySQL与Homebrew一起安装,则可能会出现此问题。在“ XAMPP管理器”窗口中,转到“管理服务器”,然后选择“ MySQL”,然后单击“配置”并打开配置文件,那里有套接字文件路径,将该路径放入MySQL主机配置中,它应该可以工作。

就像这样:

...
[client]
#password   = your_password
port        = 3306
socket      = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
...

然后,例如在Django中:

...    
DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "NAME": "database_name",
            "USER": "user",
            "PASSWORD": "password",
            "HOST": "/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock",
            "PORT": "",
        }
    }
...

希望这可以帮助。


3

首先,知道数据目录对我来说是关键。 /usr/local/var/mysql 在这里,至少有一个扩展名为.err的文件,然后加上我的本地计算机名称。它具有我需要诊断的所有信息。

我想我先安装mysql 8搞砸了。我的应用与其不兼容,因此我不得不降级至5.7

适用于我的解决方案是转到/usr/local/etc/my.cnf

如果存在,请找到此行。我认为它与mysql 8有关:

mysqlx-bind-address = 127.0.0.1 

删除它,因为在mysql 5.7中它在错误日志中说它不喜欢它

如果该行不在bind-address下,也请在其中添加。

socket=/tmp/mysql.sock

转到 /tmp目录并删除其中的所有mysql.sock文件。在服务器启动时,它将重新创建袜子文件

在停止状态下使用mySQL删除数据目录。我的是 /usr/local/var/mysql。这是日志所在的位置

从那里我跑了

>mysqld --initialize

然后一切都开始工作...此命令将在最后为您提供一个随机密码。保存该密码以进行下一步

运行它来分配我自己的密码。

>mysql_secure_installation 

>brew services stop mysql@5.7

>mysql.server start

现在正在工作。希望这可以帮助。大约需要3个小时的反复试验。



0

我花了很多时间来执行此操作,我想将django应用程序放在服务器上,运行时python manage.py migrate遇到了这个问题

和!!我设置了 ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock 它终于成功了!



0

从终端停止和启动mysql服务器解决了我的问题。以下是在MacO中停止和启动mysql服务器的cmd。

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start

注意:从Mac System首选项重新启动服务不能解决Mac中的问题。因此,请尝试从终端重启。



-1

对于CentOS,用于初始化mysql的文件位于:

/etc/init.d/mysqld start
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.