Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MySQLdb连接问题_Python_Mysql_Connection - Fatal编程技术网

Python MySQLdb连接问题

Python MySQLdb连接问题,python,mysql,connection,Python,Mysql,Connection,我的MySQLdb模块有问题 db = MySQLdb.connect( host = 'localhost', user = 'root', passwd = '', db = 'testdb', port = 3000) (我正在使用自定义端口) 我得到的错误是: Error 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

我的MySQLdb模块有问题

db = MySQLdb.connect(
    host = 'localhost', 
    user = 'root', 
    passwd = '', 
    db = 'testdb', 
    port = 3000)
(我正在使用自定义端口)

我得到的错误是:

Error 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 错误2002:无法通过套接字'/var/lib/MySQL/MySQL.sock'(2)连接到本地MySQL服务器 这没有多大意义,因为这是my.conf中设置的默认连接。。好像它忽略了我提供的连接信息

mysql服务器肯定在那里:

[root@baster ~]# mysql -uroot -p -P3000 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 19 Server version: 5.0.77 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use testdb; Database changed mysql> [root@baster~]#mysql-uroot-p-P3000 输入密码: 欢迎使用MySQL监视器。命令以结束;或\g。 您的MySQL连接id是19 服务器版本:5.0.77源发行版 键入“帮助;”或“\h”以获取帮助。键入“\c”以清除缓冲区。 mysql>使用testdb; 数据库已更改 mysql> 我直接从python提示符尝试:

>>> db = MySQLdb.connect(user='root', passwd='', port=3000, host='localhost', db='pyneoform') Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python2.5/site-packages/MySQLdb/__init__.py", line 74, in Connect return Connection(*args, **kwargs) File "/usr/lib64/python2.5/site-packages/MySQLdb/connections.py", line 169, in __init__ super(Connection, self).__init__(*args, **kwargs2) _mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") >>> >>>db=MySQLdb.connect(user='root',passwd=''',port=3000,host='localhost',db='pyneoform') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/lib64/python2.5/site-packages/MySQLdb/_-init__.py”,第74行,在Connect中 返回连接(*args,**kwargs) 文件“/usr/lib64/python2.5/site packages/MySQLdb/connections.py”,第169行,在__ 超级(连接,自).\uuuu初始化(*args,**kwargs2) _mysql_exceptions.OperationalError:(2002,“无法通过socket'/var/lib/mysql/mysql.sock'(2)”连接到本地mysql服务器) >>>
我很困惑…:(

可能尝试将关键字参数
unix\u socket=None
添加到
connect()

确保mysql服务器正在侦听tcp连接,这可以通过netstat-nlp(在*nix中)实现)。这是您尝试建立的连接类型,出于安全原因,db通常默认情况下不会在网络上侦听。此外,在使用mysql命令时,请尝试指定--host=localhost,除非您另有指定,否则这也会尝试通过unix套接字进行连接。如果mysql未配置为侦听tcp connect如果发生错误,该命令也将失败

下面是有关unix套接字和连接疑难解答的相关部分。请注意,所描述的错误(2002)与您得到的错误相同


或者,检查您正在使用的模块是否具有通过unix套接字连接的选项(如David所建议的).

添加
unix_socket='path_to_socket'
其中
path_to_socket
应该是MySQL套接字的路径,例如
/var/run/mysqld/mysqld2.sock
据我所知,python连接器只能通过internet套接字连接到MySQL:unix sockets(命令行客户端的默认设置)不支持

在CLI客户端中,当您说“-h localhost”时,它实际上将localhost解释为“哦,localhost?我将只连接到unix套接字”,而不是internet localhost套接字

也就是说,mysql CLI客户端正在做一些神奇的事情,Python连接器正在做一些“一致但有限制的”事情


选择你的毒药。(双关语不是有意的;)

我遇到了这个问题,unix套接字文件在其他地方,python试图连接到一个不存在的套接字。一旦使用unix_socket选项纠正了这一问题,它就起作用了。

Mysql在主机为“localhost”时使用sockets,在主机为其他主机时使用tcp/ip。默认情况下,Mysql将同时监听这两种消息-您可以在my.cnf文件中禁用套接字或网络(有关详细信息,请参阅Mysql.com)

在您的情况下,忘记port=3000,mysql客户机库不会注意它,因为您使用的是localhost,并在unix_socket='path_to_socket'中指定套接字


如果决定将此脚本移动到另一台计算机,则需要更改此连接字符串以使用实际的主机名或ip地址,然后可以松开unix_套接字并恢复端口。mysql的默认端口是3306-您不需要指定该端口,但如果该端口是您正在使用的端口,则需要指定3000。

localhost
更改为
127.0.0.1
使用
MySQLdb
解决了我的问题:

db = MySQLdb.connect(
    host = '127.0.0.1', 
    user = 'root', 
    passwd = '', 
    db = 'testdb', 
    port = 3000)

使用
127.0.0.1
强制客户机使用TCP/IP,以便侦听TCP端口的服务器可以将其清除。如果将
host
指定为
localhost
,则将使用Unix套接字或管道。

刚刚尝试过,它不喜欢None,因此我改为使用“”,现在它抱怨“”不是有效的套接字。奇怪的是,它好像只想通过套接字连接..Proto Recv-Q Send-Q本地地址外部地址状态PID/程序名tcp 0.0.0.0:3300 0.0.0:*听着5361/mysqldYeah,我的错,在上面的例子中我写了端口3000。我把它修好了。。奇怪的是,问题依然存在。呵呵。更新配置后你重启服务器了吗?我今天早些时候重启了。。但是我没有修改服务器,我只是更新了脚本使用3300而不是3000(这是代码中的一个错误)。。[root@basterhttpd]#mysql-uroot-p-P666输入密码:mysql>显然mysql忽略了我的端口号..:|是的,这尤其棘手:通过“localhost”请求TCP连接会触发unix套接字错误。令人惊讶的是,这也解决了我的问题!这适用于XAMPP和Big Brother Bot(B3)!或者,您可以找到MySQL unix套接字的位置,并使用
unix\u socket=/path/to/MySQL.sock
指定它,这是完全错误的。如果您尝试连接到
127.0.0.1
,您将通过TCP/IP进行连接。如果尝试连接到
localhost
,则将通过unix套接字进行连接。MySQL的默认套接字通常是
/tmp/MySQL.sock
,但如果您的套接字位于其他地方,则必须指定它使用的位置
unix\u socket='/path/to/MySQL.sock
注意:这还取决于您使用的库。