Ho bisogno di rendere il server MySQL per la transazione di rollback immediatamente dopo che il client è disconnesso, perché ogni client funziona in modo concorrente. Il problema può essere riprodotto come questi (utilizzando un tipo InnoDB tabella)
Su client A:Rollback MySQL su transazione con connessione persa/disconnessa
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server
Sul client B:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here
avevo impostato opzione server di MySQL come innodb_rollback_on_timeout
e l'utilizzo client di mysql mysql --skip-reconnect
su entrambi i client. Ho provato questo utilizzando un server e due client, su una rete. Ho disconnesso fisicamente la rete (scollega il cavo) dopo la linea SELECT ... FOR UPDATE;
. Devo fare in modo che altri client siano in grado di utilizzare tblone
su una transazione (bloccarlo, aggiornarlo) immediatamente e, poiché ciò accade, penso che il server debba eseguire il rollback della transazione per il client A, dopo che il client A si disconnette.
Interessante domanda. Ho pensato che fosse automatico! Quindi abbiamo bisogno di qualcosa come "innodb_rollback_on_disconnect' .. sarebbe fantastico e direi che dovrebbe essere l'impostazione predefinita! Sarebbe una ragionevole richiesta di modifica per mysql. – TMS