当我在测试套件中尝试连接到本地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)
26条答案
按热度按时间jxct1oxe1#
在终端中运行以下命令
/usr/local/mysql/bin/mysqld\u安全
然后重启机器生效。真管用!!
voj3qocg2#
当我的开发人员安装了一个像mamp这样的堆栈管理器时,我在我的店里看到过这种情况,它是在一个非标准的地方预先配置mysql的。
在终点站
这将为您提供指向sock文件的路径。选择该路径并在数据库主机参数中使用它。
你需要做的是你的观点
注意
同时运行
which mysql_config
如果您在机器上安装了多个mysql server示例,那么您可能连接到了错误的示例。uqjltbpv3#
如果与套接字相关,请阅读此文件
看看标准插座的位置。是这样一句话:
现在为shell创建一个别名,如:
这样你就不需要r了
o2g1uqev4#
在ubuntu14.04中,您可以这样做来解决此问题。
vfhzx4xs5#
有同样的问题。结果呢
mysqld
已停止运行(我在mac osx上)。我重新启动它,错误消失了。我知道了
mysqld
没有运行主要是因为以下链接:http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html注意第一个提示!
jfewjypa6#
我必须首先找到所有进程ID,从而杀掉所有mysql示例:
ps辅助| grep mysql
然后杀了他们:
杀死-9{pid}
然后:
mysql.server启动
为我工作。
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协议。或者尝试dns名称
这将绕过作为
root@localhost
,但要确保root@'127.0.0.1'
定义。下次连接到mysql时,请运行以下命令:
这给了你什么?
user()报告您如何尝试在mysql中进行身份验证
current\u user()报告如何允许您在mysql中进行身份验证
如果这些函数返回相同的值,那么您正在按预期进行连接和身份验证。如果值不同,则可能需要创建相应的用户
root@127.0.0.1
.q43xntqr8#
插座位于/tmp中。在unix系统上,由于/tmp上的模式和所有权,这可能会导致一些问题。但是,只要你告诉我们你可以正常使用mysql连接,我想这在你的系统上不是问题。初步检查应该是将mysql.sock重新定位到一个更中立的目录中。
这个问题“随机”发生(或者不是每次都发生)的事实让我认为它可能是服务器问题。
您的/tmp是位于标准磁盘上,还是位于特殊的挂载上(如ram中)?
您的/tmp是否为空?
做
iotop
当你遇到问题时向你展示错误的东西?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时仍然存在问题。
3mpgtkmj10#
可能会有帮助。
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系统。那么,
这将使您的mysql(8.0)重新工作。
zpjtge2212#
这对我有用。但是,如果这不起作用,那么请确保mysqld正在运行并尝试连接。
twh00eeo13#
在尝试了其中一些解决方案但没有取得任何成功之后,这就是我的工作:
重新启动系统
mysql.server启动
成功!
lqfhib0f14#
确保您的/etc/hosts
127.0.0.1 localhost
在它里面,它应该工作得很好ugmeyewa15#
对我来说,问题是我没有运行mysql服务器。先运行服务器,然后执行
mysql
.