Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

seata回滚失败,status自动改成1 #3277

Closed
ZaneGeng opened this issue Nov 13, 2020 · 7 comments
Closed

seata回滚失败,status自动改成1 #3277

ZaneGeng opened this issue Nov 13, 2020 · 7 comments

Comments

@ZaneGeng
Copy link

1、@GlobalTransactional和@transactional可以一起使用吗
2、mysql5.8使用seata回滚后,有个字段status回滚失败,会自动改成1,和奇怪

@caohdgege
Copy link
Contributor

第一点见官网Q&A第22点
Q: 22. AT 模式和 Spring @transactional 注解连用时需要注意什么 ?
A:
@transactional 可与 DataSourceTransactionManager 和 JTATransactionManager 连用分别表示本地事务和XA分布式事务,大家常用的是与本地事务结合。当与本地事务结合时,@transactional和@GlobalTransaction连用,@transactional 只能位于标注在@GlobalTransaction的同一方法层次或者位于@GlobalTransaction 标注方法的内层。这里分布式事务的概念要大于本地事务,若将 @transactional 标注在外层会导致分布式事务空提交,当@transactional 对应的 connection 提交时会报全局事务正在提交或者全局事务的xid不存在。

第二点是什么表的status会变成1?如果这个表值的是undo_log的话,那这个是正常的。

@ZaneGeng
Copy link
Author

第一点见官网Q&A第22点
Q: 22. AT 模式和 Spring @transactional 注解连用时需要注意什么 ?
A:
@transactional 可与 DataSourceTransactionManager 和 JTATransactionManager 连用分别表示本地事务和XA分布式事务,大家常用的是与本地事务结合。当与本地事务结合时,@transactional和@GlobalTransaction连用,@transactional 只能位于标注在@GlobalTransaction的同一方法层次或者位于@GlobalTransaction 标注方法的内层。这里分布式事务的概念要大于本地事务,若将 @transactional 标注在外层会导致分布式事务空提交,当@transactional 对应的 connection 提交时会报全局事务正在提交或者全局事务的xid不存在。

第二点是什么表的status会变成1?如果这个表值的是undo_log的话,那这个是正常的。

status是我的业务表一个字段,不是seata的undo_log表,在回滚时会莫名改成1

@funky-eyes
Copy link
Contributor

image

@178180793
Copy link

遇到了同样的问题,说一下解决的方案。
首先检查mysql的status的字段类型,如果是tinyint类型并且长度为1的话,
建议修改类型为int ,或者增加长度为2,因为mysql默认把tinyint(1)的当成了boolean类型。
所以存入undolog表的时候状态字段就变成1了。
修改之后seata就没问题了。
希望能帮到你。

@ZaneGeng
Copy link
Author

遇到了同样的问题,说一下解决的方案。
首先检查mysql的status的字段类型,如果是tinyint类型并且长度为1的话,
建议修改类型为int ,或者增加长度为2,因为mysql默认把tinyint(1)的当成了boolean类型。
所以存入undolog表的时候状态字段就变成1了。
修改之后seata就没问题了。
希望能帮到你。

感谢分享,问题按此方法得以解决!

@huan415
Copy link
Contributor

huan415 commented May 21, 2021

spring.datasource.url: jdbc:mysql://ip:port/xxx?useUnicode=true&characterEncoding=utf-8&tinyInt1isBit=false

我也遇到过,是这样解决的(tinyInt1isBit=false

@wangliang181230
Copy link
Contributor

@huan415 @ZaneGeng @178180793 现在已通过代码修复该BUG,PR:#6068

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants