我正在尝试使用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()方法上。我不确定为什么会这样或如何解决它。非常感谢您的任何指导
========================================= UPDATE ===== =====================================
我让脚本运行时间更长,我还尝试使用phpmyadmin连接,以及在本地计算机上使用简单的mysqli_connect()脚本。所有人都回来了:
MySQL错误:2013年,“在'读取初始通信数据包'时失去与MySQL服务器的连接',系统错误:0”
这似乎是问题的根源。我可以在PC上修复一些配置来消除这个问题吗?
答案 0 :(得分:0)
作为一般规则,每当你试图找出一个程序停滞的地方时,你可以用strace(strace myprog.py)启动它,或者你可以在pid上运行一个strace(strace -p pidnum)
例如,我的ipython的pid为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如何使用,但在正常的终端会话中,这是我要开始的地方