kranov: (Default)
kranov ([personal profile] kranov) wrote2014-12-08 12:32 pm

mysql galera и блокировочник и версионник, мозг уходит за разум.

Если сессии попали на один сервер, надо разруливать с помощью select for update, если на разные, надо ловить падение commit.

Чудеса чудесные. Добился
select * from test where id = 1;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
Это нормальная ситуация, кто-то поменял и закомитил на другой ноде строку, которую мы уже меняли в текущей транзакции, поэтому теперь нам надо делать rollback, и читать это нельзя, а если бы мы еще не меняли, но уже читали, то читать нам можно было бы и читали бы мы старое значение, потому что repeatable read.

Если проадейтить на разных нодах строку в одно и тоже (типа set f=0) , то проблем с комитом не будет, сильно запутало меня это.