Un Broken pipe
messaggio significa che l'altra estremità ha chiuso la connessione, probabilmente a causa di un ordine errato di pacchetti ricevuti, o perché lo stato tra client e server non è sincronizzato o qualcosa del genere. Forse c'è un firewall tra la tua applicazione e il server che uccide le connessioni persistenti? O forse non si è verificato nulla sul tubo (connessione) per un po' di tempo e il server l'ha chiuso? In ogni caso, se stai utilizzando un meccanismo di pooling delle connessioni (dovresti!)
, dovrebbe essere possibile delegare ad esso la gestione di tali situazioni.
Oppure, se intendi utilizzare sempre MySQL, puoi provare ad aggiungere failOverReadOnly=false&maxReconnects=10&autoReconnect=true
alla stringa di connessione. Questo è specifico per il driver MySQL JDBC, quindi ti consiglierei davvero di configurare il tuo meccanismo di pool di connessioni per testare le connessioni prima di distribuirle alla tua applicazione.