Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL rollback su transazione con connessione persa/scollegata

Quando si sta disconnettendo fisicamente un client non si invia una normale disconnessione (che avrebbe causato un rollback) e il protocollo MySQL non è molto loquace, quindi il server non sa mai che il client non è presente. Penso che questo sia un difetto nel protocollo rispetto ad altri sistemi di database in cui il client e il server parlano molto di più internamente.

Comunque. Ci sono due variabili che potresti cambiare. Fondamentalmente fanno lo stesso ma per clienti diversi.

Il primo è wait_timeout ed è utilizzato da client di applicazioni come java o php.

L'altro è interactive_timeout ed è usato dal client mysql (come nei tuoi test)

In entrambi i casi il server per terminare la connessione dopo un certo numero di secondi e in tal caso esegue il rollback di tutte le transazioni e rilascia tutti i blocchi.