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.
E i limiti max_connections? Potresti colpire il massimo consentito in vari momenti. –
Sembra improbabile dato che succede alla prima connessione – DNA
+1 per una domanda ben fatta, ma penso che sarebbe meglio su serverfault.com –