2010-08-26 13 views
17

Mam problem z nawiązaniem połączenia z moim lokalnej bazy danych MySQL przy użyciu MySQLdb biblioteki Pythona. Skrypt działał dobrze wcześniej, ale od czasu do czasu otrzymam błąd MySQL w tytule. Wydaje się, że nie ma żadnego wyjaśnienia, kiedy wystąpi błąd, a skrypt jest zawsze uruchamiany z tego samego komputera z tymi samymi argumentami.Błąd MySQL: 2013, „Utracono połączenie z serwerem MySQL na«odczyt początkowej komunikacji pakietu», błąd systemu: 0”

Serwer MySQL działa jako usługa w systemie Windows XP SP3 przy użyciu portu 3306 (lokalnie obsługiwane roboty phpMyAdmin), a skrypt jest uruchamiany z systemu operacyjnego gościa Ubuntu 10.04 w Oracle VirtualBox Oracle.

Obecnie pracuję obejść ten problem, otwierając wiersz polecenia i wykonujące „Stop MySQL netto”, a następnie „start MySQL netto”. To pozwala mi uruchomić skrypt kilka razy, zanim spowoduje błąd, który naprawiam, restartując usługę MySQL.

Ponieważ wciąż wprowadzam zmiany w skrypcie, zdarzają się sytuacje, gdy skrypt podnosi wyjątek i nie wychodzi z wdziękiem, chociaż przechwyciłem wyjątek i zamknąłem kursor i połączenie.

kod, aby połączyć się z bazą danych:

def __init__(self): 
    try: 
    print "Connecting to the MySQL database..." 
    self.conn = MySQLdb.connect(host = "192.168.56.1", 
           user = "guestos", 
           passwd = "guestpw", 
           db = "testdb") 
    self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor) 
    print "MySQL Connection OK" 
    except MySQLdb.Error, e: 
    print "MySQLdb error %d: %s" % (e.args[0],e.args[1]) 
    raise 

Pełne błąd generowany, kiedy to nastąpi to w następujący sposób:

MySQLdb error 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0 
Traceback (most recent call last): 
    File "search.py", line 45, in <module> 
    dataHandler = DataHandler() 
    File "/home/guestos_user/workspace/Search/src/data_handler.py", line 25, in __init__ 
    db = "testdb") 
    File "/usr/lib/pymodules/python2.6/MySQLdb/__init__.py", line 81, in Connect 
    return Connection(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 170, in __init__ 
    super(Connection, self).__init__(*args, **kwargs2) 
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0") 
+0

Udało ci się to naprawić? Dostaję to również: \ mój host 127.0.0.1 łączy się z puttem na podłączonym do mojego serwera – CodeGuru

+0

Naprawiłem go w tym momencie, aktualizując MySQL. Podejrzewam, że prawdopodobnie używasz najnowszej wersji, ale na wszelki wypadek sprawdź dokładnie.Jeśli używasz najnowszego, to niestety nie wiem jak to naprawić. –

+0

To zadziałało dla mnie http://stackoverflow.com/questions/32399831/error-during-django-running-migrations-django-db-utils-operationalerror-201 – sinaza

Odpowiedz

-1

Ten bug report może być interesujące dla ciebie. Nie wiem, czy to pomoże, ale niektórzy byli w stanie rozwiązać go za pomocą nazwy serwera zamiast adresu ipwe właściwościach połączenia .

+0

Widziałem to; ponieważ uruchamiam swoje środowisko programistyczne w gościnnym systemie operacyjnym, nie jestem pewien jak nazwać serwer; localhost to sprzężenie zwrotne i nie widzę żadnych opcji w VirtualBox, aby nazwać hosta. Czy istnieje opcja konfiguracji Apache, której mogę użyć? Mój serwer dev nie jest dostępny z internetu (ani nie chcę, żeby był). –

3

Widziałem to zdarzyć, gdy procesy potomne próbować dzielić ten sam identyfikator połączenia MySQL (roztwór = tworzenie nowych połączeń dla każdego procesu potomnego). Nie jestem pewien, czy jest to również możliwe podczas dzielenia obiektów połączenia z wieloma wątkami.

Jest to jednak tylko jedna z wielu możliwych przyczyn. Zobacz odpowiedź VVS w MySQL Error 2013, aby uzyskać listę zasobów do rozwiązywania problemów.

+0

Każde wywołanie skryptu powinno technicznie tworzyć nowy obiekt połączenia, ale nie jestem wystarczająco obeznany z Pythonem, aby powiedzieć, czy agreguje on połączenia w przejrzysty sposób. Co więcej, * zamykam * połączenia z serwerem MySQL po wyjściu skryptu. Po prostu ponowne połączenie w nowej instancji skryptu (po poprzednim wyjściu) wydaje się być problemem. –

18
sudo vi /etc/mysql/my.cnf 

usuwać

bind-address = 127.0.0.1 

następnie

sudo reboot now 

to wszystko. Pamiętaj, że spowoduje to, że twój serwer mysql będzie mniej bezpieczny, ponieważ go ujawniasz.

+1

lub "service mysql restart", mysqld nie działa w Ubuntu. –

+0

Szukałem godzin, aby rozwiązać ten problem, i nikt nie wspomina o potrzebie PONOWNEJ NAGRODY! Dziękuję Ci! – MikeSchinkel

+0

Dlaczego ta akcja "sprawia, że ​​serwer mysql jest mniej bezpieczny" ??? – Pathros

0

uruchomić serwer Windows i od czasu do czasu php-win.exe załaduje i pozostać na liście procesów w Menedżerze zadań Windows.

Jeśli znasz plik hosta jest poprawna, a następnie zabić proces php-win.exe i restart iis iisreset

Jeśli używasz systemu Windows, a następnie Twój problem powinien zostać rozwiązany.

0

mógłbyś zmienić bind-address = localhost i zrestartować serwer MySQL?Wygląda na to zagadnienie jest związane z Ciebie: http://forums.mysql.com/read.php?152,355740,355742#msg-355742

także to-

If MySQL port is wrong result is MySQL client error 2013 "Lost connection ...". Note that this error also occurs if port forwarding is disabled in SSH configuration (the configuration parameter 'AllowTcpForwarding' is set to 'no' in the 'sshd_config' file). It (here) simply tells that there is no connection from SSH to MySQL for some reason. But the mySQL client API 'thinks' there was one connection and that is why is says 'Lost connection ...' and not 'Can’t connect...'. There was one successful connection - but not to the MySQL server - to the SSH daemon only! But the MySQL client API is not designed to 'see' the difference!

sprawdź this.

2

Czy masz w swoim serwerze MySQL numer konta o nazwie [email protected]? Musisz mieć konto, aby uzyskać dostęp do serwera MySQL od YOURIPADDRESS!

Na przykład: Twój adres IP to 192.168.56.2; następnie musisz utworzyć i zliczyć, jeśli nie istnieje, aby uzyskać dostęp.

mysql> create user [email protected] identified by 'guestpw'; 
+0

czy 127.0.0.1 będzie działało poprawnie? Jestem połączony przez Putty, wydaje mi się dobry z przeglądarki podczas uzyskiwania dostępu do phpmyadmin – CodeGuru

0

miałem dokładnie ten sam błąd mysql (ERROR 2013 (HY000): Utracono połączenie z serwerem MySQL na 'odczyt początkowej komunikacji pakietu', błąd systemu: 0 =) i postanowili go poprzez dodanie nowego wiersza do /etc/hosts.deny.

0

Możliwość: Twoja baza danych jest uszkodzona.

Napotkano tę sytuację, gdy uruchomiłem instrukcję UPDATE dla określonego wiersza określonej tabeli. (W szczególności edytowałem element w witrynie Django Admin.) W większości przypadków baza danych działała dobrze.

końcu rozwiązany problem przez wykonanie:

OPTIMIZE TABLE `your_table` 

Po tym wszystko było OK, nie ma połączenia utracone.

Wniosek:

Problem „Lost connection to MySQL server at 'reading initial communication packet'”, czasami „Can't connect to MySQL server on '127.0.0.1'”, mógłby zostać rozwiązany przez prowadzenie pełnej optymalizacji bazy danych, jeśli baza danych jest uszkodzona. Aby uzyskać więcej informacji, read this.

+0

To był mój problem; Zaimportowałem wywóz z produkcji do istniejącej bazy danych i od tego momentu, jeśli cokolwiek miało otwartą bazę danych, mój serwer był niepołączalny. Upuszczenie bazy danych i ponowne zaimportowanie sprawiły, że wszystko działało. Innym wspólnym mianownikiem jest to, że jestem również w projekcie Django. –

1

Problem został rozwiązany po ponownym uruchomieniu komputera Mac. Chociaż może to być bardziej konkretna poprawka.

0

Otrzymałem podobny błąd podczas próby połączenia się z moim serwerem MySQL zdalnie przez użytkownika z wystarczającymi uprawnieniami.

Po edycji pliku /etc/mysql/my.cnf zawierać

[mysqld] 
bind-address=xx.xx.xxx.xxx 

gdzie xx.xx.xxx.xxx jest mój lokalny adres IP, zacząłem doświadcza dokładnie ten sam błąd, jak ty. Stamtąd znalazłem odpowiedź dotyczącą tego problemu (odpowiedź konwertera kawy), który zadziałał dla mnie i można go znaleźć tutaj: Lost connection to MySQL server at 'reading initial communication packet', system error: 0 on a windows machine

Jedyne co zrobiłem, aby rozwiązać problem, to edytować /etc/hosts.allow do włączenia

mysqld: ALL: allow 

Działa teraz świetnie! Mam nadzieję, że to pomogło :)

Powiązane problemy