TiDB设置只读后无法直接commit

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.1.6
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

如下图,设置只读后直接commit失败,请问这个是预期中的行为吗
image

1 个赞

:flushed:只读的话,有什么需要commit?

某些框架会自动输入commit,即使是select,这个倒没啥,解决方案很多,不过感觉这个问题很奇怪,为啥只读了就不能单独commit,算不算一个bug呢,不是太理解这个行为的目的是什么,如果仅仅是不让commit,但是begin,commit是可以的。

看参数说明,感觉是预期吧。搞个只读事务呢?

1 个赞

这个不是开启时尚未提交的事务,而是开启后的事务,没有显示的begin,比如
select 1;
commit;
这种也会报错,不是太能理解这种行为的目的,而且似乎文档也没有解释(可能是我没找到地方)

:yum:那只能用这句强行解释了,commit属于可能会修改数据的语句。

1 个赞

但是我
begin;
select 1;
commit;
这个行为却是允许的,如果这样也报错我还能理解 :joy:

:crazy_face:解释不了了~蹲一个大拿解释~

不会是因为隐式事务的原因吧。如果有6.2.0之前的环境,试试看。

我这个6.1是有这个问题,等回头拿高版本的测下吧,临时倒是先能给个 RESTRICTED_REPLICA_WRITER_ADMIN权限绕过去这个问题

解决了吗

解决容易,不commit或者加大权限,不过不明白这个行为是不是bug,坐等大佬们解答了

只读是不是客户端只有查询没有DML操作了

我用root直接登录的,刚试了下生产的6.1.6有这个问题,测试系统8.0没能复现,感觉应该是个bug

报错是无效事务,begin;select 1;commit;是个正常事务,select 1;commit;当select完了事务就结束了,commit跟前面命令就没关系了,其实跟只执行commit是一样的

代码是是先设置了autocommit=0,还有有差别的

设置了是不是应该跟这个begin;select 1;commit;一样啊

对,但是实际会报错,或者什么都不输入直接commit也报错

那就不科学了,等大佬解释一下 :grinning:

已和官方大佬确认

新版本已经解决.PR Sign in to GitHub · GitHub

1 个赞