WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Can't connect to MySQL server on '192.168.0.2' (1) (https://www.wn.se/forum/showthread.php?t=35000)

radioaktivitet 2009-02-08 08:33

I 99,999% av fallen fungerar det bra att ansluta till min MySql server. Men sporadiskt så får jag följande fel

"Can't connect to MySQL server on '192.168.0.2' (1)"

mysql_errno() returnerar "2003"

Jag kör FreeBSD. Relativt nya versioner av både FreeBSD och MySQL. Systemet är inte särskilt lastat.

Hur gör jag för att lista ur var problemet ligger?

Jag är tacksam för all hjälp jag kan få!

najk 2009-02-08 08:36

Kolla aktiva processer på mysqlservern med "SHOW PROCESSLIST", kika även på värdet för "max connections".

Jonas 2009-02-09 12:26

Som najk, kolla även hur många anslutningar varje thread kan hantera.

thread_cache_size skall du kika på.

Ett tips generellt är att titta igenom hela din my.cnf fil.

Där hittar du också max_connections


Hur är anslutningen till maskinen? Alltså från webserver till mysqlserver? Är där ingen trafik? Har du låg timeout i anslutningen?

gsoc 2009-02-09 13:03

Det var en gammal bugg i php som såg ut sådär förut, hade något att göra med dnsuppslagen, kolla om det hjälper att använda ipadress vid anslutning istället...

radioaktivitet 2009-02-09 14:23

När jag kikar i processlistan så finns där inget särskilt. Men det intressanta är ju att se processlistan precis i samma ögonblick som jag får felet.

Men. Efterssom jag inte får någon connection så kan jag inte fråga "show processlist" just då. Moment 22. Eller?

max_connections är 100
thread_cache_size är 0 (verkar vara default)


Citat:

Hur är anslutningen till maskinen? Alltså från webserver till mysqlserver? Är där ingen trafik? Har du låg timeout i anslutningen?
Det är mycket trafik. Vet ej hur man kollar timeout.

Citat:

Det var en gammal bugg i php som såg ut sådär förut, hade något att göra med dnsuppslagen, kolla om det hjälper att använda ipadress vid anslutning istället...
Jag använder "192.168.0.2" vid anslutningen. Menar du att jag skall använda någonting annat?

Jonas 2009-02-09 14:38

Citat:

Originally posted by radioaktivitet@Feb 9 2009, 15:23
När jag kikar i processlistan så finns där inget särskilt. Men det intressanta är ju att se processlistan precis i samma ögonblick som jag får felet.
Men. Efterssom jag inte får någon connection så kan jag inte fråga show processlist just då. Moment 22. Eller?
max_connections är 100
thread_cache_size är 0 (verkar vara default)

thread_cache_size innehåller en cache med föregående anslutningar, alltså anslutningen sker snabbare om denna är aktiverad.

http://www.sitebuddy.com/MySQL/thread_cach...ead_concurrency
Han förklarar hur du skall räkna ut värdet här.

Citat:

Det är mycket trafik. Vet ej hur man kollar timeout.
Timeout är ett argument du ger i mysql_connect()

jonny 2009-02-09 14:52

Du har ingen logg som säger mer då?

radioaktivitet 2009-02-09 14:54

Citat:

Ursprungligen postat av Jonas
Citat:

Ursprungligen postat av radioaktivitet
När jag kikar i processlistan så finns där inget särskilt. Men det intressanta är ju att se processlistan precis i samma ögonblick som jag får felet.
Men. Efterssom jag inte får någon connection så kan jag inte fråga show processlist just då. Moment 22. Eller?
max_connections är 100
thread_cache_size är 0 (verkar vara default)


thread_cache_size innehåller en cache med föregående anslutningar, alltså anslutningen sker snabbare om denna är aktiverad.

http://www.sitebuddy.com/MySQL/thread_cach...ead_concurrency
Han förklarar hur du skall räkna ut värdet här.

Citat:

Det är mycket trafik. Vet ej hur man kollar timeout.


Timeout är ett argument du ger i mysql_connect()

Threads_created/Connections blir i mitt fall 6355823 / 6490174 = 0,979299.
Är inte säker på hur jag skall tolka det.
Max_used_connections är 101. Bör jag sätta thread_cache_size till 101? Hur vet jag om min burk pallar det?

Ang. thread_concurrency så har jag inte den variabeln ö.h.t. Kör mysql 5.0.51a. Kanske är den variabeln borttagen?

Ang. timeout. så säger dokumentationen

Citat:

resource mysql_connect ([ string $server=ini_get("mysql.default_host") [, string $username=ini_get("mysql.default_user") [, string $password=ini_get("mysql.default_password") [, bool $new_link=false [, int $client_flags=0 ]]]]] )
Vilket värde är timeout? Idag anger jag bara server, username och password. Resten är default. Vad rekommenderar ni?

radioaktivitet 2009-02-10 15:40

Jag har fortfarande inte kommit så mycket längre än min senaste inlägg.

Man kan tycka att det borde finnas något verktyg där man kan mata in sina värden, och som spottar ur sig förslag på vilka variabler man skall ändra.

najk 2009-02-10 15:57

På MySQL servern skulle du kunna installera mtop och kolla noga när andra inte kan ansluta, jag gissar på att du har fler anslutningar än servern tillåter (eftersom du har max_used_connections är 101, medans max_connections är 100).
På webbservern kan du köra ab och testa belasta din sida samtidigt som du kör mtop..

Clarence 2009-02-12 21:48

Citat:

Ursprungligen postat av radioaktivitet
Citat:

Originally posted by -Jonas@Feb 9 2009, 15:38
Citat:

Ursprungligen postat av radioaktivitet
När jag kikar i processlistan så finns där inget särskilt. Men det intressanta är ju att se processlistan precis i samma ögonblick som jag får felet.
Men. Efterssom jag inte får någon connection så kan jag inte fråga show processlist just då. Moment 22. Eller?
max_connections är 100
thread_cache_size är 0 (verkar vara default)


thread_cache_size innehåller en cache med föregående anslutningar, alltså anslutningen sker snabbare om denna är aktiverad.

http://www.sitebuddy.com/MySQL/thread_cach...ead_concurrency
Han förklarar hur du skall räkna ut värdet här.

Citat:

Det är mycket trafik. Vet ej hur man kollar timeout.


Timeout är ett argument du ger i mysql_connect()


Threads_created/Connections blir i mitt fall 6355823 / 6490174 = 0,979299.
Är inte säker på hur jag skall tolka det.
Max_used_connections är 101. Bör jag sätta thread_cache_size till 101? Hur vet jag om min burk pallar det?

Ang. thread_concurrency så har jag inte den variabeln ö.h.t. Kör mysql 5.0.51a. Kanske är den variabeln borttagen?

Ang. timeout. så säger dokumentationen

Citat:

resource mysql_connect *([ string $server=ini_get("mysql.default_host") *[, string $username=ini_get("mysql.default_user") *[, string $password=ini_get("mysql.default_password") *[, bool $new_link=false *[, int $client_flags=0 *]]]]] )
Vilket värde är timeout? Idag anger jag bara server, username och password. Resten är default. Vad rekommenderar ni?

Öka thread_cache_size steg för steg tills threads_created inte längre stiger i rask takt vid normal belastning. Se till att burken inte börjar svara långsammare under tiden.

För att komma tillrätta med eventuellt problem vid detta tillfälle kan en bra start vara att aktivera slow query log med slow query time på 1s eller så. Ett bättre alternativ skulle vara att skapa en användare med SUPER privilegier som du loggar in manuellt eller automatiskt en gång i minuten och dumpar processlist om used connections ligger på 101 (1 anslutning reserveras för sådana användare, av just anledningen att kunna se och åtgärda problem).

Timeout för php-anslutningen kan du sätta med php.ini alternativt ini_set och heter mysql.connect_timeout. Den är dock default på 5/10/60s beroende på php-version så den är snarare för högt satt om något - om den inte är ändrad.

thread_concurrency fungerar bara under Solaris, så det är förmodligen inte aktuellt (?). Det finns dock en innodb_thread_concurrency också men den köar inte upp något vid anslutningstillfället.

studiox 2009-02-12 22:52

Jag skulle nog också connecta till localhost. Borde inte vara någon större skillnad men det borde underlätta för att försöka göra en socks anslutning, och det är ju bra.

radioaktivitet 2009-02-13 08:58

Clarence: Jag skall prova dina förslag på måndag. Tack!

studiox: Databasen ligger på en annan server än min webserver, så jag kan inte använda localhost.

studiox 2009-02-13 10:52

Citat:

Originally posted by radioaktivitet@Feb 13 2009, 09:58

studiox: Databasen ligger på en annan server än min webserver, så jag kan inte använda localhost.

Ahh. :) Kan du tänkta dig att det är nätverksproblem då? Det är ju inte helt otänkbart..


Alla tider är GMT +2. Klockan är nu 00:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson