Wycofanie MySQL przy transakcji z utraconym / rozłączonym połączeniem

Muszę zmusić serwer MySQL do wycofania transakcji natychmiast po odłączeniu klienta, ponieważ każdy klient działa jednocześnie. Problem można odtworzyć w ten sposób (używając typu tabel innodb)

Na Kliencie A:

START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server

Na Kliencie B:

START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here

Ustawiłem opcję serwera MySQL jak innodb_rollback_on_timeout i używałem klienta mysql mysql --skip-reconnect na obu klientach. Próbowałem tego używając jednego serwera i dwóch klientów, w sieci. Fizycznie odłączyłem sieć (odłączyłem Kabel) po linii SELECT ... FOR UPDATE;. Muszę sprawić, aby inni klienci mogli używać tblone na transakcji (zablokować ją, zaktualizować) natychmiast, i aby tak się stało, myślę, że serwer powinien wycofać transakcję dla Klienta a, po tym, jak klient A się rozłączy.

Author: TMS, 2012-03-30

1 answers

Kiedy fizycznie odłączasz klienta, nie wysyłasz normalnego rozłączenia (co spowodowałoby wycofanie), a protokół MySQL nie jest zbyt rozmowny, więc serwer nigdy nie wie, że Klienta tam nie ma. Myślę, że jest to wada Protokołu w porównaniu do innych systemów bazodanowych, w których klient i serwer rozmawiają wewnętrznie znacznie więcej.

W każdym razie. Istnieją dwie zmienne, które można zmienić. Zasadniczo robią to samo, ale dla różnych klientów.

The pierwszy to wait_timeout i jest używany przez klientów aplikacji, takich jak java lub php.

Drugi to interactive_timeout i jest używany przez klienta mysql (jak w testach)

W obu przypadkach serwer zabija połączenie po kilku sekundach i robiąc to wycofuje wszystkie transakcje i zwalnia wszystkie blokady.

 10
Author: Andreas Wederbrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-08 05:57:47