Could not retrieve transation read-only status server 的解决办法
问题描述:
在项目开发的过程中,使用Hibernate的ORM进行建表时,出现 “ Could not retrieve transation read-only status server ”的异常,无法进行表的创建的操作,具体异常内容如下:
org.activiti.engine.ActivitiException: couldn't create db schema: create table ACT_GE_PROPERTY (
NAME_ varchar(64),
VALUE_ varchar(300),
REV_ integer,
primary key (NAME_)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1242)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1138)
at org.activiti.engine.impl.db.DbSqlSession.executeMandatorySchemaResource(DbSqlSession.java:897)
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaCreateEngine(DbSqlSession.java:874)
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaUpdate(DbSqlSession.java:952)
at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1318)
at org.activiti.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:28)
at org.activiti.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:37)
at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:78)
at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:57)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:42)
at org.activiti.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:48)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:63)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:35)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:44)
at org.activiti.engine.impl.ProcessEngineImpl.<init>(ProcessEngineImpl.java:81)
at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:665)
at etc.TActiviti.createActivitiTables(TActiviti.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.sql.SQLException: Could not retrieve transation read-only status server
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:949)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3967)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3938)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:814)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:791)
at org.activiti.engine.impl.db.DbSqlSession.executeSchemaResource(DbSqlSession.java:1216)
... 40 more
Caused by: java.sql.SQLException: Unknown system variable 'tx_read_only'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4208)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4140)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2597)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2758)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2820)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2769)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1569)
at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3961)
... 44 more
问题分析:
导致这个异常的情况有两种:
一种情况为:使用MySql数据库服务为最新版本8.0.11,而在项目开发的过程中使用了低版本的MySql驱动包。
二种情况为: 当MySQL的数据库隔离级别为REPEATABLE-READ时,查询一个select语句也算是事物的开始,而且在hibernate里会把以select语句开头的事务标记为只读事务,此时在这个事务里再执行insert、update、delete等DML语句就会出现如上的异常信息。
解决方案:
解决方案一:
修改项目中MySQL数据库驱动包,将版本选择为与当前数据库服务器版本相同的版本,如果是Maven项目,则在pom.xml的配置文件中,键入如下内容:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency>
注意:${mysql-connector-java.version} 为自己匹配的版本号!!!
如果为普通Web项目,我这儿提供了几个常用版本的MySQL驱动下载,点击下面连接进行下载:
https://download.csdn.net/download/hello_world_qwp/10473266
解决方案二:
通过修改MySQL的事务隔离级别实现,查看当前MySQL数据库的事务隔离级别,输入命令 “ show variables like 'transaction_%'; ” ,如下图:
将隔离级别修改为 -> READ-COMMITTED 即可,输入命令 “ SET GLOBAL transaction_isolation='READ-COMMITTED'; ” 即可解决该问题了。
注:如果要永久的生效,则需要在MySQL的初始化配置文件中进行配置,如下图:
好了,关于 Could not retrieve transation read-only status server 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
Could not retrieve transation read-only status server 的解决办法相关推荐
- 服务器上 type=Internal Server Error, status=500 错误解决办法
服务器上 type=Internal Server Error, status=500 错误解决办法 原本在环境上好好的,但是隔了一个下午却出现了500的错误,排查了很久,一开始还以为是我自己的配置文 ...
- mysql master status_show master status为空解决办法
show master status为空解决办法 kerwin 五月 29, 2014 默认yum安装了mysql,现在想调试一下主从,结果发现执行show master status为空. Welc ...
- your port 80 is actually used by server IIS解决办法
为什么80%的码农都做不了架构师?>>> your port 80 is actually used by server IIS解决办法 Wamp Apache 检测 80端 ...
- 关于mac双系统安装SQL Server卡在starting server的解决办法
关于mac双系统安装SQL Server卡在starting server的解决办法 因为本人有时候会做一些设计的公司,奔着mac系统的稳定性,购置了一台macbook Pro2017年出厂的一款本, ...
- is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...
1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 " ...
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
问题描述: 1.远程服务器安装了mysql服务并且启动成功,在本地可以进行自由的访问和更新等操作 2.服务器已开通了远程访问服务器3306端口的权限并且通过netstat -ltnp命令查看3306处 ...
- [error] id returned 1 exit status原因及解决办法
1. 上次编译运行的shell没有关闭(小黑窗) 2.函数定义在了main()函数里面 例: int main() {...void Function_1(int a,char b,char c){ ...
- Failed to load resource: the server responded with a status of 404 ()解决办法
这是由于服务器编译的问题导致的.在服务器编译打包时,有些资源没有编译进去,导致服务器里不能访问一些资源. 解决方法: 1.将无法扫描到的资源放入out文件夹对应的位置中 例如: 将(1)处的文件夹放到 ...
- 6678EVM调试K1_STK_v1.1例程中GE_test的时候报错:DDR3 leveling has failed, STATUS = 0x40000064的解决办法
在调试K1_STK_v1.1例程中GE_test的时候,使用的是TMDSEVM6678LE板子. 最开始一直报错DDR3 leveling has failed, STATUS = 0x4000006 ...
最新文章
- 【武书连】2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
- 简单module_深入理解JavaScript之全面解析Module模式
- mysql解释器_atitit.java解析sql语言解析器解释器的实现
- The ntpath module
- python股票自动买卖视频教程_十分钟学会用Python交易股票
- 博客系统评论模块列表转树形结构
- python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
- JMETER安装中遇到的问题(not able to find Java executable or version.Please check your java installation)
- mini2440 SD卡脱机烧写恢复
- java tm插件下载_Java(TM) Platform SE binary
- 忍痛分享五款小众软件,点赞收藏加关注
- 主板android刷机,安卓主板刷机步骤
- HTC IMEI码或SN码查询地址
- xml文件怎么转换成wps_xml文件转word文档 怎么将XML文档转成WORD文档
- ionic:引入图标
- 三菱PLC以太网MC通讯协议模块
- 一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。
- linux可执行文件剪裁
- 黎曼流形学习的学习笔记(2):Neural Ordinary Differential Equations(来源:NIPS 2018 oral) (未完待续)
- brk系统调用和copy-on-write机制