最近支付業務發生了一件怪事,在一個事務 失敗後,調用rollback,發現只rollback 了最後一條sql。
開發查了很久,發現是網絡抖動,造成第一次創建鏈接的 begin 丟掉了,後面再重連後就變成autocommit了,這樣就造成rollback的時候前面的sql 全都沒有rollback。
只能是在 begin 的時候加一個變量將應用服務器的時間戳打到mysql 服務器上,後面所有操作都去讀下這個時間戳,和應用服務器上的時間戳一致,就ok,否則就重做。效率差了很多,但是保證了事務。
其他同學有什麼好辦法麼?