开发机连接本地 MySQL, PHP 能连上 Python 咋连不上?

2015-04-12 16:21:49 +08:00
 laoyuan
都是连 localhost:3306 环境 OSX 10.10

Python 报 61 Connection refused

File "/Library/Python/2.7/site-packages/pyspider/database/mysql/taskdb.py", line 28, in __init__
host=host, port=port, autocommit=True)
File "/Library/Python/2.7/site-packages/mysql/connector/__init__.py", line 162, in connect
return MySQLConnection(*args, **kwargs)
File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 129, in __init__
self.connect(**kwargs)
File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 454, in connect
self._open_connection()
File "/Library/Python/2.7/site-packages/mysql/connector/connection.py", line 417, in _open_connection
self._socket.open_connection()
File "/Library/Python/2.7/site-packages/mysql/connector/network.py", line 472, in open_connection
errno=2003, values=(self.get_address(), _strioerror(err)))
mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'localhost:3306' (61 Connection refused)
4771 次点击
所在节点    Python
14 条回复
laoyuan
2015-04-12 16:34:41 +08:00
代码对比:
cnx = mysql.connector.connect(user='root', password='pass', host='localhost', port='3306', database='db')
$con = mysql_connect('localhost:3306', 'root', 'pass');
laoyuan
2015-04-12 22:13:12 +08:00
伤心,还是走sock吧
laoyuan
2015-04-12 22:16:00 +08:00
看来我对sock的理解有问题,貌似就是sock路径的问题!
cheng007
2015-04-13 09:23:03 +08:00
python代码你写了database="db",你有在mysql创建这个db吗?
laoyuan
2015-04-13 10:29:34 +08:00
@cheng007 有的,我看别人代码好像没有 database 这个参数也可以
laoyuan
2015-04-13 10:34:42 +08:00
oott123
2015-04-13 11:27:13 +08:00
试试换成 127.0.0.1 ?
:) 好吧我承认这是一种玄学…
laoyuan
2015-04-13 12:02:22 +08:00
@oott123 试过了,能连上就真是玄学了哈哈
fxxkgw
2015-04-13 17:03:01 +08:00
import MySQLdb
conn = MySQLdb.connect()
换MySQLdb试试
zsx
2015-04-13 18:10:15 +08:00
@oott123 @laoyuan 用Microsoft SQL Server 2008的时候还真遇到过用127.0.0.1奇慢无比的问题,执行一条最简单的查询用了几分钟……后来发现要在SQL Server配置管理器里MSSQLServer的TCP/IP协议打开……(这不是玄学
oott123
2015-04-13 18:13:21 +08:00
@zsx MySQL 的话,如果在 UNIX 下用 localhost ,经常会用 socks 方式连接。具体的机制我也不知道叫什么。
在所有系统上,如果你的 DNS 配置有问题,对 localhost 解析不正确的话、或者解析到 IPv6 而你的 MySQL 并未监听 IPv6 的情况下也可能遇到问题。
而 MySQL 的权限机制里,除了用户名、密码之外,还有主机头;如果你配置的用户是 username @ 127.0.0.1 的,那么也有可能遇到连接不上的问题……

玄学就是懒得解释嘛 :)
zsx
2015-04-13 18:19:53 +08:00
@oott123 前次用PMA创建了一个数据库然后新建了用户并分配了给这个库的所有权限结果就是Access Denied,看了主机头之类全部没问题;最后的解决方案是删除用户,然后新建用户后再创建数据库(啊玄学太可怕了
laoyuan
2015-04-23 15:57:52 +08:00
laoyuan
2015-04-23 16:12:35 +08:00
果然,指定mysql.sock 位置后mysql-connector-python 也连通了
cnx = mysql.connector.connect(user='root', password='pass', host='localhost', port='3306', unix_socket='/private/tmp/mysql.sock', database='db')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/183233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX