当我在测试套件中尝试连接到本地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条答案
按热度按时间rseugnpd16#
如果您在macosx中丢失了守护程序mysql,但却出现在其他路径中(例如private/var中),请执行以下命令
1)
2) 使用以下命令重新启动与mysql的连接:
也为mariadb工作
pbpqsu0x17#
我想我前段时间也见过这种行为,但记不清细节了。
在我们的例子中,问题是testrunner初始化数据库连接的那一刻,与所需的第一个数据库交互有关,例如,通过在settings.py或某些init.py中导入模块。我会设法搜集更多的信息,但这可能已经为你的案子敲响了警钟。
h9vpoimq18#
我刚换了衣服
HOST
从localhost
至127.0.0.1
而且效果很好:vfh0ocws19#
这可能是以下问题之一。
mysql锁不正确。解决方案:您必须找到正确的mysql套接字,
mysqladmin-p变量| grep套接字
然后将其放入数据库连接代码中:
/tmp/mysql.sock是grep返回的
2.不正确的mysql端口解决方案:必须找到正确的mysql端口:
然后在代码中:
3306是grep返回的端口
我认为第一种选择能解决你的问题。
i2loujxw20#
如果出现如下错误:
然后找到mysqld.sock文件的位置并将其添加到“host”。
就像我在linux上使用xampp一样
mysqld.sock
文件位于其他位置。所以它不适用于/var/run/mysqld/mysqld.sock
'vsmadaxz21#
在网上看了太久没有贡献。在尝试从命令行键入mysql提示符后,我继续收到以下消息:
错误2002(hy000):无法通过套接字'/tmp/mysql.sock'(2)连接到本地mysql服务器
这是因为我的本地mysql服务器不再运行。为了重新启动服务器,我导航到
mysql.server所在的位置。从这里输入:
这将重新启动本地mysql服务器。
从那里你可以重置根密码,如果需要的话。。
zour9fqk22#
请检查您的mysql是否未达到最大连接数,或者是否处于某种引导循环中,如果my.cnf中的设置不正确,则经常会发生这种情况。
使用ps aux | grep mysql检查pid是否正在更改。
xkrw2x1b23#
mysql手册的相关部分在这里。我将从这里列出的调试步骤开始。
另外,请记住localhost和127.0.0.1在此上下文中不是一回事:
如果主机设置为
localhost
,然后使用插座或管道。如果主机设置为
127.0.0.1
,则客户端将被迫使用tcp/ip。例如,您可以检查数据库是否正在侦听tcp连接
netstat -nlp
. 似乎它正在侦听tcp连接,因为您这么说mysql -h 127.0.0.1
很好用。要检查是否可以通过套接字连接到数据库,请使用mysql -h localhost
.如果这些都没有帮助,那么您可能需要发布更多关于mysql配置的详细信息,以及如何示例化连接等。
omhiaaxx24#
使用lsof命令检查mysql进程的打开文件数。
增加打开文件的限制,然后重新运行。
u4dcyp6a25#
对我来说,mysql服务器没有运行。所以,我通过
那么
mysql_secure_installation
为了保护服务器,现在我可以通过sudo mysql -uroot -p
euoag5mw26#
在“管理数据库连接”对话框中配置数据库连接。选择“标准(tcp/ip)”作为连接方法。
详见本页http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
根据另一个页面,即使指定localhost,也会使用套接字文件。
如果未指定主机名或指定特殊主机名localhost,则使用unix套接字文件。
它还显示了如何通过运行以下命令来检查服务器:
如果mysqld进程正在运行,您可以通过尝试以下命令来检查它。在您的设置中,端口号或unix套接字文件名可能不同。主机ip表示运行服务器的计算机的ip地址。