Python MySQLdb 连接时冻结
我正在尝试在Python中使用MySQLdb来连接我在Pagoda Box应用上建立的数据库。首先,我用以下命令打开了Pagoda的数据库隧道:
$ pagoda tunnel -a <app-name>
它返回说隧道已经成功打开,连接地址是127.0.0.1:3307。我在Python的IDLE中运行了以下命令:
import MySQLdb
conn = MySQLdb.connect(host = '127.0.0.1', port=3307,user='user',passwd='pass')
结果IDLE的界面卡住了(也就是说,它在当前命令上无限循环)。看起来是卡在connections.py里的Connect()方法上。我不太明白为什么会这样,也不知道该怎么解决。如果你能给点建议,我会非常感激。
=========================================更新==========================================
我让脚本运行了更长时间,还尝试用phpmyadmin和一个简单的mysqli_connect()脚本在我的本地电脑上连接。结果都是:
MySQL错误:2013,“在'读取初始通信包'时与MySQL服务器失去连接,系统错误:0”。
这似乎是问题的根源。我能在我的电脑上做些什么配置来解决这个问题吗?
1 个回答
-1
一般来说,当你想知道一个程序卡在哪里的时候,你可以用strace来启动它(比如:strace myprog.py),或者你可以对它的进程号(pid)运行strace(比如:strace -p pidnum)。
举个例子,我的ipython的进程号是12608,所以我运行
strace -po 12608
然后我再运行
con = MySQLdb.connect('xxx.xxx.xxx.xxx', 'user', '', 'database');
这样我就能看到strace显示出成功的连接信息。
setsockopt(4, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
setsockopt(4, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
setsockopt(4, SOL_IP, IP_TOS, [8], 4) = 0
setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(4, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
我不太确定在Pagoda Box上这个怎么用,但在普通的终端会话中,我通常会从这里开始。