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 z innymi systemami baz danych, w których klient i serwer rozmawiają wewnętrznie znacznie więcej.
Tak czy siak. Istnieją dwie zmienne, które możesz zmienić. Zasadniczo robią to samo, ale dla różnych klientów.
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 twoich testach)
W obu przypadkach serwer zabija połączenie po kilku sekundach, a gdy to robi, wycofuje wszystkie transakcje i zwalnia wszystkie blokady.