请教下,TiDB 应用端报错 read-only 什么原因导致的?

应用端报 Could not retrieve transaction read-only status from server

原因:

当数据库隔离级别为 REPEATABLE-READ 时,查询一个 SELECT 语句也算是事物的开始,而且在一些 JAVA 框架里会把以 SELECT 语句开头的事务标记为只读事务,此时在这个事务里再执行 INSERTUPDATEDELETEDML 语句就会报错。

处理方式:

  • 检查程序连接时是否使用了 select @@session.tx_read_only
  • 更新 mysql-connector