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

oxalkeyp  于 2021-06-21  发布在  Mysql
关注(0)|答案(26)|浏览(535)

当我在测试套件中尝试连接到本地mysql服务器时,失败并出现以下错误:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

但是,我可以通过运行命令行随时连接到mysql mysql 程序。一 ps aux | grep mysql 显示服务器正在运行,并且 stat /tmp/mysql.sock 确认套接字存在。此外,如果我在中打开调试器 except 子句,我能够可靠地连接到完全相同的参数。
这个问题复制得相当可靠,但是它看起来并不是100%,因为每隔一段时间,我的测试套件实际上运行时都不会出现这个错误。当我试图和 sudo dtruss 它没有繁殖。
所有的客户机代码都是python的,尽管我不知道这有什么关系。
切换到使用主机 127.0.0.1 产生错误:

DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
jxct1oxe

jxct1oxe1#

在终端中运行以下命令
/usr/local/mysql/bin/mysqld\u安全

然后重启机器生效。真管用!!

voj3qocg

voj3qocg2#

当我的开发人员安装了一个像mamp这样的堆栈管理器时,我在我的店里看到过这种情况,它是在一个非标准的地方预先配置mysql的。
在终点站

mysql_config --socket

这将为您提供指向sock文件的路径。选择该路径并在数据库主机参数中使用它。
你需要做的是你的观点

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

注意

同时运行 which mysql_config 如果您在机器上安装了多个mysql server示例,那么您可能连接到了错误的示例。

uqjltbpv

uqjltbpv3#

如果与套接字相关,请阅读此文件

/etc/mysql/my.cnf

看看标准插座的位置。是这样一句话:

socket = /var/run/mysqld/mysqld.sock

现在为shell创建一个别名,如:

alias mysql="mysql --socket=/var/run/mysqld/mysqld.sock"

这样你就不需要r了

o2g1uqev

o2g1uqev4#

在ubuntu14.04中,您可以这样做来解决此问题。

zack@zack:~/pycodes/python-scraping/chapter5$**mysqladmin -p variables|grep socket**
Enter password: 
| socket                                            |***/var/run/mysqld/mysqld.sock***                                                                                          |
zack@zack:~/pycodes/python-scraping/chapter5$***ln -s  /var/run/mysqld/mysqld.sock /tmp/mysql.sock***
zack@zack:~/pycodes/python-scraping/chapter5$ ll /tmp/mysql.sock 
lrwxrwxrwx 1 zack zack 27 11月 29 13:08 /tmp/mysql.sock -> /var/run/mysqld/mysqld.sock=
vfhzx4xs

vfhzx4xs5#

有同样的问题。结果呢 mysqld 已停止运行(我在mac osx上)。我重新启动它,错误消失了。
我知道了 mysqld 没有运行主要是因为以下链接:http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html
注意第一个提示!

jfewjypa

jfewjypa6#

我必须首先找到所有进程ID,从而杀掉所有mysql示例:
ps辅助| grep mysql
然后杀了他们:
杀死-9{pid}
然后:
mysql.server启动
为我工作。

nzrxty8p

nzrxty8p7#

我对这件事有两个鬼鬼祟祟的猜测

猜想#1

调查无法访问 /tmp/mysql.sock 文件。当我设置mysql数据库时,我通常让socket文件站点进入 /var/lib/mysql . 如果您以 root@localhost ,您的操作系统会话需要访问 /tmp 文件夹。确保 /tmp 在操作系统中具有正确的访问权限。另外,请确保sudo用户始终可以在中读取文件 /tmp .

猜想2

通过访问mysql 127.0.0.1 如果你不注意,会引起一些混乱。怎样?
从命令行,如果您使用 127.0.0.1 ,您可能需要指定tcp/ip协议。

mysql -uroot -p -h127.0.0.1 --protocol=tcp

或者尝试dns名称

mysql -uroot -p -hDNSNAME

这将绕过作为 root@localhost ,但要确保 root@'127.0.0.1' 定义。
下次连接到mysql时,请运行以下命令:

SELECT USER(),CURRENT_USER();

这给了你什么?
user()报告您如何尝试在mysql中进行身份验证
current\u user()报告如何允许您在mysql中进行身份验证
如果这些函数返回相同的值,那么您正在按预期进行连接和身份验证。如果值不同,则可能需要创建相应的用户 root@127.0.0.1 .

q43xntqr

q43xntqr8#

插座位于/tmp中。在unix系统上,由于/tmp上的模式和所有权,这可能会导致一些问题。但是,只要你告诉我们你可以正常使用mysql连接,我想这在你的系统上不是问题。初步检查应该是将mysql.sock重新定位到一个更中立的目录中。
这个问题“随机”发生(或者不是每次都发生)的事实让我认为它可能是服务器问题。
您的/tmp是位于标准磁盘上,还是位于特殊的挂载上(如ram中)?
您的/tmp是否为空?
iotop 当你遇到问题时向你展示错误的东西?

ux6nzvsh

ux6nzvsh9#

对我来说,我确信mysqld已经启动,命令行mysql可以正常工作。但是httpd服务器显示了这个问题(不能通过socket连接到mysql)。

我用mysqld\u safe启动了这项服务。

最后,我发现当我用服务mysqld start启动mysqld服务时,出现了问题(selinux权限问题),当我修复selinux问题,并用“服务mysqld start”启动mysqld时,httpd连接问题消失了。但是当我用mysqld\u safe启动mysqld时,mysqld就可以工作了(mysql客户端可以正常工作)。但在连接httpd时仍然存在问题。

3mpgtkmj

3mpgtkmj10#


# shell script ,ignore the first

$ $(dirname `which mysql`)\/mysql.server start

可能会有帮助。

laximzn5

laximzn511#

对于那些通过自制软件从5.7升级到8.0的用户来说,这个错误很可能是由于升级未完成造成的。就我而言, mysql.server start 我发现以下错误:
错误!服务器在不更新pid文件的情况下退出
然后我通过 cat /usr/local/var/mysql/YOURS.err | tail -n 50 ,并发现以下内容:
innodb:不支持崩溃后升级。
如果你在同一条船上,首先安装 mysql@5.7 通过自制,停止服务器,然后再次启动8.0系统。

brew install mysql@5.7

/usr/local/opt/mysql@5.7/bin/mysql.server start
/usr/local/opt/mysql@5.7/bin/mysql.server stop

那么,

mysql.server start

这将使您的mysql(8.0)重新工作。

zpjtge22

zpjtge2212#

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

这对我有用。但是,如果这不起作用,那么请确保mysqld正在运行并尝试连接。

twh00eeo

twh00eeo13#

在尝试了其中一些解决方案但没有取得任何成功之后,这就是我的工作:
重新启动系统
mysql.server启动
成功!

lqfhib0f

lqfhib0f14#

确保您的/etc/hosts 127.0.0.1 localhost 在它里面,它应该工作得很好

ugmeyewa

ugmeyewa15#

对我来说,问题是我没有运行mysql服务器。先运行服务器,然后执行 mysql .

$ mysql.server start
$ mysql -h localhost -u root -p

相关问题