2012-02-20 25 views
5

Questo mi sta uccidendo. Abbiamo un'applicazione ASP.NET/Mono su un database MySQL. Per mesi siamo stati tormentati da un'occorrenza completamente casuale ma coerente di "Impossibile connettersi a nessuno degli host MySQL specificati". Non sono affatto un professionista di MySQL, e spero che sia sciocco.MySql * completamente casuale * Impossibile connettersi a nessuno degli host MySQL specificati

Specifiche:
MySQL 5.5.17
MySQL Connector/Net 6.4.4
Mono 2.10.8
MonoDevelop 2.8.6.5

stringa di connessione: SERVER = localhost, 3306; DATABASE = xxx ; UID = xxx; PWD = xxx; CONNECTION TIMEOUT = 90; Encrypt = false;

Max_connections è impostato su 150. Non ci sono mai più di 5 connessioni e sono tutte attive (probabilmente a causa del raggruppamento).

  • L'applicazione è C# ASP.NET 3.5. Funziona solido come una roccia per anni su Windows/IIS. Nove mesi fa il nostro mercato ci ha portato a scendere da Windows, quindi (facilmente potrei aggiungere) spostato il tutto su Mono/Apache.

  • Il problema si verifica solo sul lato Mono, ma è fondamentale dal momento che abbiamo ritirato il nostro supporto di Windows.

  • Si verifica in media circa 10 volte all'ora, ma la spaziatura varia molto.

  • Il problema è stato assistito nelle seguenti configurazioni:

Ubuntu 11/Apache2/mod_mono
OSX Lion/Apacke2/mod_mono
Ubuntu 11/xsp2/MonoDevelop server di eseguire il debug
OSX Lion/xsp2/MonoDevelop di debug del server

  • Hanno pasticciato con keepaliv e, wait_timeout, connectionreset, ecc senza alcun risultato. I tempi sembrano non avere alcun effetto. L'errore è istantaneo su conn.open - non dopo il timeout della connessione.

  • Ecco un indizio: l'app non verrà eseguita assolutamente con Pooling = false. Quasi ogni tentativo di connessione fallisce. Certo che voglio condividere, ma non sono sicuro del perché non funzionerebbe senza.

  • L'applicazione ha incorporato un "heartbeat" (sessione utente nel database) - ogni 2 minuti.

  • Il più esasperante di tutti? Non può assolutamente essere riprodotto su richiesta in un ambiente in esecuzione - è casuale. Ho esaminato le dimensioni delle query, i tempi di esecuzione, ecc.

  • In esattamente uno scenario posso farlo accadere: all'avvio iniziale di un server Ubuntu o OSX, la prima volta che Mono rende la sua prima connessione a MySQL - succederà allora. Dopo, è indovinato da nessuno.

+0

E i limiti max_connections? Potresti colpire il massimo consentito in vari momenti. –

+0

Sembra improbabile dato che succede alla prima connessione – DNA

+0

+1 per una domanda ben fatta, ma penso che sarebbe meglio su serverfault.com –

risposta

0

Ok, questo è vecchio, ma ho perso così tanto tempo su questo, ho di condividere questa salvavita articolo ho finalmente trovato: Getting Mono and Mysql to play nice together

E io riassumo per il caso della link end up in 404 un giorno: OGNI variabile della stringa di connessione DEVE essere definita. Quindi, sì, quello include la porta , che non ho mai dovuto definire in una stringa di connessione nella mia vita precedente.

Per me ha risolto il problema.

Problemi correlati