2009-08-18 13 views
18

Używam JDBC do łączenia się z MySQL. Kiedy jest w localhost:3306, wszystko jest w porządku.Dlaczego połączenie z serwerem MySQL jest tak wolne?

Ale kiedy przenosimy aplikację na inny komputer w intranecie i używam <Intranet-IP>:3306 do łączenia się z bazą danych MySQL, nawiązanie połączenia z MySQL zajmie około 1 minuty. Co z tym?

Odpowiedz

32

Może to być problem z DNS. Możesz wyłączyć wyszukiwanie nazw hostów DNS, uruchamiając mysqld za pomocą opcji --skip-name-resolve w pliku konfiguracyjnym.

Czytaj tutaj po więcej szczegółów: http://dev.mysql.com/doc/refman/5.0/en/host-cache.html

+0

Dziękuję bardzo! – MemoryLeak

+0

Miałem ten problem i rzeczywiście był to problem z odwrotną wersją dns. – acemtp

+12

Aby być czystym, '-skip-name-resolve' byłby używany jako opcja linii poleceń podczas uruchamiania mysql, podczas gdy' skip-name-resolve' (bez podwójnego łącznika z przodu) zostanie użyty w pliku konfiguracyjnym. – JYelton

1

zapory ogniowe, Internet, routing itp. Spowalnia połączenie.

Zamiast tego należy umieścić swoją bazę danych w sieci wewnętrznej. Zachowaj to lokalnie i za dużą zaporą ogniową. Możesz oczywiście mieć zaporę i zabezpieczenia między komputerami. Zalecam, aby nie udostępniać w ten sposób połączenia z bazą danych mysql do Internetu niefiltrowanego.

+0

to intranetowy adres IP! – MemoryLeak

+0

ah, widzę, że edytowałeś swoje pytanie :) Dobrze, że znalazłeś odpowiedź na swoje pytanie. – Makach

7

Dla mnie było to rozwiązanie znalazłem tutaj Jeśli łączność IP6 jest włączona, połączenie z „localhost” może być powolna, zamiast korzystać z adresu IP 127.0.0.1. To działało dla mnie.

my mysql slow to connect problem was solved by this solution

+0

Ten błąd został zauważony podczas rozwiązywania problemu z powolną instalacją MediaWiki. mysql_connect trwało prawie sekundę. Zmieniono konfigurację z localhost na 127.0.0.1 i zmieniono z 1021ms na 7ms. Dzięki! – jmgardn2

+0

Dzięki! To właśnie rozwiązało problematyczne pytanie, które napisałem. Kto wie, że IPv6 tak bardzo bałaganił w najnowszych wersjach MySQL. –

11

The --skip-name-resolve pracował wielki dla mnie.

Żeby było trwałe, po prostu dodaj wiersz na końcu pliku my.ini w sekcji [mysql]:

skip-name-resolve 

i voila! Transakcje teraz latają!