2012-06-27 14 views
5

Ho il seguente messaggio di errore:come capire "impossibile connettersi" ai messaggi di errore di mysql?

SQLSTATE [HY000] [2003] non può connettersi al server MySQL su '192.168.50.45' (4)

Come potrei analizzare questo (Ho HY000, ho 2003 e ho il (4).

+0

Cosa intendi con "Ho HY000, ho 2003 e ho il (4)" – bretterer

+0

errore "10061"? – alfasin

+0

Forse risposta qui: http://stackoverflow.com/questions/2138959/confusing-pdo-only-problem-cant-connect-through-socket-access-denied-cant-co – JohnP

risposta

10

HY000 è un codice di errore di livello ODBC molto generale e 2003 è il codice di errore specifico di MySQL che significa che la connessione iniziale del server non è riuscita. è il codice di errore dalla chiamata a livello di sistema fallita che il driver MySQL ha provato a m Ake. (Ad esempio su Linux si vedrà "(111)" quando la connessione è stata rifiutata, perché la chiamata connect() riuscita con il codice di errore ECONNREFUSED, che ha un valore di 111.)

+1

Ok, quindi come faccio a sapere che cosa significa 4? Sono su Ubuntu –

+0

Non lo faresti, a meno che tu non sappia esattamente quale chiamata di sistema sta fallendo. – cdhowie

4

Utilizzando lo strumento perror che viene fornito con MySQL:

shell> perror 4 
OS error code 4: Interrupted system call 

potrebbe a bug in cui viene segnalato errore non corretto, in questo caso, potrebbe un semplice timeout di connessione (errno 111)

3

FWIW, dopo aver trascorso circa 2-3 mesi alla ricerca in questo in un varietà di modi, siamo arrivati ​​alla conclusione che (almeno per noi), l'errore (4) si verifica quando anche la rete è presente pieno di dati per il completamento della connessione in un periodo di tempo ragionevole. dalle nostre indagini, la (4) si verifica a metà del processo di handshaking. Puoi vederlo in un ambiente unix usando 'netem' per simulare la congestione della rete.

La soluzione rapida è il parametro di timeout della connessione. Questo nasconderà qualsiasi (4) errore, ma potrebbe non essere la soluzione al problema. La vera soluzione è vedere cosa sta succedendo alla fine del DB al momento. Se si stanno elaborando molti dati quando ciò accade, potrebbe essere una buona idea vedere se è possibile dividerlo in blocchi più piccoli o persino passare l'elaborazione a un server diverso, se si ha quel lusso.

1

Mi è capitato di affrontare questo problema. Aumentare finalmente il timeout connect_thout.

0

Stavo solo lottando con lo stesso problema.

Disabilitare le ricerche del nome host DNS per risolvere il problema.

[mysqld] ... ... saltare-nome-risolvere

Non dimenticare di riavviare MySQL abbia effetto.

0

@cdhowie Anche se in altre circostanze si può avere ragione, con questo particolare errore il (4) è un errore della libreria client mysql, causato da un handshake non riuscito. È effettivamente visibile nel codice sorgente. Il motivo normale è troppi dati che causano un timeout interno. Fare "room" per la connessione normalmente lo ordina senza mascherare il problema, come aumentare il timeout o aumentare la larghezza di banda.

Problemi correlati