Błąd połączenia z bazą danych mysql

9

Moja aplikacja musi dość często łączyć się z bazą danych mysql na innym komputerze. Jednak często pojawiają się błędy przy połączeniu; Zwykle mogę się ostatecznie połączyć, ale po wielu próbach. Otrzymuję komunikat o błędzie:

Mysql.mysql(): Couldn't connect to SQL-server: Lost connection to MySQL server at 'reading authorization packet', system error: 2

Przeczytałem informacje tutaj: http://dev.mysql.com/doc/refman/5.0/en/error-lost-connection.html, a także komentarze do błędu http://bugs.mysql.com/bug .php? id = 28359 .

Jak widać, istnieje wiele przerwanych połączeń:

mysql> POKAŻ GLOBALNY STATUS PODOBNY DO 'Aborted_connects';
+ ------------------ + ------- +
| Zmienna nazwa | Wartość |
+ ------------------ + ------- +
| Aborted_connects | 2540 |
+ ------------------ + ------- +

Wydłużyłem limit czasu z 5 do 15 sekund:

mysql> pokaż zmienne takie jak „connect_timeout”;
+ ----------------- + ------- +
| Zmienna nazwa | Wartość |
+ ----------------- + ------- +
| connect_timeout | 15 |
+ ----------------- + ------- +

ale to nie pomogło. Wszelkie sugestie, jak to debugować? Powoduje to, że interakcja z bazą danych jest strasznie powolna, gdy średnio trzeba spróbować połączyć się 5 razy, zanim zadziała.

Nie próbowałem jeszcze utrzymywać połączenia otwartego przez cały okres użytkowania aplikacji, czy byłoby lepiej? Jak zapobiec zamykaniu połączenia?

Jeśli to pomaga komputerowi z problemami, jest Windows 7 w wersji 32-bitowej, podczas gdy serwer mysql działa w systemie Debian Linux.

Zitrax
źródło
Wiem, że to tylko bandaż, ale adres URL raportu o błędzie mówi: „Rozwiązałem ten problem, zwiększając zmienną globalną connect_timeout do 30 sekund”. Czy chcesz wypróbować wyższą wartość?
JoseK,
1
Zimny ​​komfort, ale to dobrze napisane pytanie. Doskonałe śledzenie artykułu Erica S. Raymonda ... +1 do Ciebie i powodzenia.
gWaldo,
@JoseK, oczywiście, że mogę spróbować, ale wątpię, aby to miało duży wpływ, ponieważ nie zauważyłem żadnej poprawy, zwiększając z 5 do 15.
Zitrax,
Czy to jedna ze zmiennych, która nie określa limitu, jeśli wartość jest ustawiona na 0?
pjmorse,
1
Czy jesteś pewien, że nie ma jakiegoś problemu z łącznością między komputerami, być może problemu z siecią?
Warner,

Odpowiedzi:

2

Przeglądając wszystkie szczegóły błędu i raporty, które podejrzewam, że występuje tutaj problem związany z siecią lub klientem. Coś psuje lub dodaje zbyt duże opóźnienie do danych mysql.

W czystej sieci wykonaj śledzenie wireshark i sprawdź, jak wygląda rozmowa. Upewnij się, że nigdzie nie odbywa się kształtowanie ruchu. Wydaje się, że to problem tylko 64-bitowy, więc sprawdź wersję 32-bitową, aby upewnić się, że jest to ten sam problem. Zaznacz pole Windows XP - M $ zrobił kilka fajnych rzeczy do stosu sieciowego na Vistę, co spowodowało, że było to trochę do bani! Nie mamy końca problemów z siecią z maszynami Vista i Win7!

Jeśli zarządzasz śledzeniem wireshark, wklej i wklej link, jak wszyscy chcielibyśmy wyglądać.

Khushil
źródło
Co masz na myśli mówiąc „wydaje się to kwestia 64-bitowa”? To jest instalacja 32-bitowa. I przepraszam, że wspomniałem o Vista, to jest Win7, poprawiony opis.
Zitrax
Nie znam się dobrze na debugowaniu za pomocą Wireshark. Ale kilka rzeczy wydaje mi się dziwnych, jest kilka zaznaczonych na czerwono pakietów RST i retransmisja TCP, a czas niektórych pakietów jest ujemny, na przykład -257,3 sekund.
Zitrax
czy możesz w ogóle użyć innego przełącznika i ponownie go przetestować? inna marka, jeśli ją masz? gdybyś mógł
wkleić plik