Python MySQLdb 连接时冻结

-1 投票
1 回答
1668 浏览
提问于 2025-04-17 03:39

我正在尝试在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上这个怎么用,但在普通的终端会话中,我通常会从这里开始。

撰写回答