【 TiDB 使用环境】生产环境
【 TiDB 版本】6.1.6
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
如下图,设置只读后直接commit失败,请问这个是预期中的行为吗
【 TiDB 使用环境】生产环境
【 TiDB 版本】6.1.6
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
如下图,设置只读后直接commit失败,请问这个是预期中的行为吗
只读的话,有什么需要commit?
某些框架会自动输入commit,即使是select,这个倒没啥,解决方案很多,不过感觉这个问题很奇怪,为啥只读了就不能单独commit,算不算一个bug呢,不是太理解这个行为的目的是什么,如果仅仅是不让commit,但是begin,commit是可以的。
这个不是开启时尚未提交的事务,而是开启后的事务,没有显示的begin,比如
select 1;
commit;
这种也会报错,不是太能理解这种行为的目的,而且似乎文档也没有解释(可能是我没找到地方)
但是我
begin;
select 1;
commit;
这个行为却是允许的,如果这样也报错我还能理解
解释不了了~蹲一个大拿解释~
我这个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也报错
那就不科学了,等大佬解释一下