【问题标题】:Python MySQLdb freeze on connect attemptPython MySQLdb在连接尝试时冻结
【发布时间】:2011-11-30 18:29:36
【问题描述】:

我正在尝试使用 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”

这似乎是问题的根源。我可以在我的 PC 上修复一些配置以消除此问题吗?

【问题讨论】:

  • 它是否在 IDLE 之外工作?
  • 我从 cmd 窗口运行连接脚本,得到了相同的冻结结果。

标签: python freeze mysql-python


【解决方案1】:

作为一般规则,当您试图找出程序停止的位置时,您可以使用 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 一起使用,但在正常的终端会话中,这是我要开始的地方

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2019-08-23
    相关资源
    最近更新 更多