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

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

当我在测试套件中尝试连接到本地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)
rseugnpd

rseugnpd16#

如果您在macosx中丢失了守护程序mysql,但却出现在其他路径中(例如private/var中),请执行以下命令
1)

ln -s /private/var/mysql/mysql.sock /tmp/mysql.sock

2) 使用以下命令重新启动与mysql的连接:

mysql -u username -p -h host databasename

也为mariadb工作

pbpqsu0x

pbpqsu0x17#

我想我前段时间也见过这种行为,但记不清细节了。
在我们的例子中,问题是testrunner初始化数据库连接的那一刻,与所需的第一个数据库交互有关,例如,通过在settings.py或某些init.py中导入模块。我会设法搜集更多的信息,但这可能已经为你的案子敲响了警钟。

h9vpoimq

h9vpoimq18#

我刚换了衣服 HOSTlocalhost127.0.0.1 而且效果很好:


# settings.py of Django project

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': '',
},
...
vfh0ocws

vfh0ocws19#

这可能是以下问题之一。
mysql锁不正确。解决方案:您必须找到正确的mysql套接字,
mysqladmin-p变量| grep套接字
然后将其放入数据库连接代码中:

pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")

/tmp/mysql.sock是grep返回的
2.不正确的mysql端口解决方案:必须找到正确的mysql端口:

mysqladmin -p variables | grep port

然后在代码中:

pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)

3306是grep返回的端口
我认为第一种选择能解决你的问题。

i2loujxw

i2loujxw20#

如果出现如下错误:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

然后找到mysqld.sock文件的位置并将其添加到“host”。
就像我在linux上使用xampp一样 mysqld.sock 文件位于其他位置。所以它不适用于 /var/run/mysqld/mysqld.sock '

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'asd',
        'USER' : 'root',
        'PASSWORD' : '',
        'HOST' : '/opt/lampp/var/mysql/mysql.sock',
        'PORT' : ''
    }
}
vsmadaxz

vsmadaxz21#

在网上看了太久没有贡献。在尝试从命令行键入mysql提示符后,我继续收到以下消息:
错误2002(hy000):无法通过套接字'/tmp/mysql.sock'(2)连接到本地mysql服务器
这是因为我的本地mysql服务器不再运行。为了重新启动服务器,我导航到

shell> cd /user/local/bin

mysql.server所在的位置。从这里输入:

shell> mysql.server start

这将重新启动本地mysql服务器。
从那里你可以重置根密码,如果需要的话。。

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;
zour9fqk

zour9fqk22#

请检查您的mysql是否未达到最大连接数,或者是否处于某种引导循环中,如果my.cnf中的设置不正确,则经常会发生这种情况。
使用ps aux | grep mysql检查pid是否正在更改。

xkrw2x1b

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配置的详细信息,以及如何示例化连接等。

omhiaaxx

omhiaaxx24#

使用lsof命令检查mysql进程的打开文件数。
增加打开文件的限制,然后重新运行。

u4dcyp6a

u4dcyp6a25#

对我来说,mysql服务器没有运行。所以,我通过

mysql.server start

那么 mysql_secure_installation 为了保护服务器,现在我可以通过 sudo mysql -uroot -p

euoag5mw

euoag5mw26#

在“管理数据库连接”对话框中配置数据库连接。选择“标准(tcp/ip)”作为连接方法。
详见本页http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
根据另一个页面,即使指定localhost,也会使用套接字文件。
如果未指定主机名或指定特殊主机名localhost,则使用unix套接字文件。
它还显示了如何通过运行以下命令来检查服务器:
如果mysqld进程正在运行,您可以通过尝试以下命令来检查它。在您的设置中,端口号或unix套接字文件名可能不同。主机ip表示运行服务器的计算机的ip地址。

shell> mysqladmin version 
shell> mysqladmin variables 
shell> mysqladmin -h `hostname` version variables 
shell> mysqladmin -h `hostname` --port=3306 version 
shell> mysqladmin -h host_ip version 
shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

相关问题