[seata]MySQL无delete权限,怎么办

2024-07-15 976 views
4

系统中全部使用的虚拟删除字段,无物理删除权限 当业务表进行insert后,此时undo_log会产生delete的日志,但无权限删除 可以自定义删除逻辑么

回答

6

你说的无权限删除是这条undolog记录无权限删除它是吗?

8

undolog记录可以删除 业务表有许多,如果业务表都开通删除权限是不允许的

7

你的意思是业务表的数据只能逻辑删除是吧? 但理论上来说之前insert的数据是未提交的,看似在本地库里提交了,但是在分布式事务中他是未提交的,所以在决议为回滚的时候应该将其删除 如果你业务不适用这种场景,建议可以适用xa模式,至于逻辑删除,后续讨论是否要适配一下

6

1、本地insert语句,事务已提交 2、其它参与者报错,导致触发分布式事务回滚 3、此时回滚步骤1的insert语句,undo解析后补偿语句是物理删除

这么看,目前AT模式不能支持吧

9

是的,按事务的层面去理解,要么都发生,要么都不发生,at的undo行为是正确的,因为他让行为都不发生了,这是正确的事务处理方式,但是按业务的理解可能是局限在本地事务上,没有跳跃到分布式事务下去看待物理删除的问题,在有分布式事务场景下每个库的提交,都是自己落库,包括tcc的资源预留也是一阶段直接落库,也就是分布式事务下一阶段的数据是存在不确定性,所以当出现回滚时,它是应该被抹除的

1

可以继承 AbstractUndoExecutor 实现一个 LogicMySQLUndoInsertExecutor . 在 buildUndoSQL 的时候 返回为 update(逻辑删除). 如果需要, 可以分配给我。