Python MySQLdb зависает при попытке подключения - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь использовать MySQLdb в Python для подключения к базе данных, которую я установил в приложении 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 останавливается (т.е. он застревает в текущей команде в бесконечном цикле).Кажется, что он зависает от метода Connect () в connections.py.Я не уверен, почему это или как это исправить.Будем благодарны за любые рекомендации, которые вы можете получить

======================================== UPDATE ==========================================

Я позволил сценарию работать дольше, и я дополнительно попытался подключиться, используя phpmyadmin, а также простой скрипт mysqli_connect () на моем локальном компьютере.Все они возвратили:

Ошибка MySQL: 2013, «Потеря соединения с сервером MySQL при« чтении исходного пакета связи », системная ошибка: 0»

Похоже, это корень проблемы,Есть ли какая-нибудь конфигурация, которую я могу исправить на своем ПК, чтобы устранить проблему?

1 Ответ

0 голосов
/ 04 октября 2011

Как правило, всякий раз, когда вы пытаетесь выяснить, где программа остановлена, вы можете запустить ее с помощью strace (strace myprog.py) или запустить страус на pid (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, но в обычном терминальном сеансе я бы начал

...