当前位置: 首页 > 面试题库 >

连接丢失/断开连接的事务的MySQL回滚

阎乐池
2023-03-14
问题内容

我需要使MySQL服务器在客户端断开连接后立即回滚事务,因为每个客户端可以同时工作。可以

在客户端A 上重现这些问题(使用innodb表类型) :

START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server

在客户B上:

START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here

我已经设置了MySQL的服务器选项,innodb_rollback_on_timeout并且mysql --skip- reconnect在两个客户端上都使用了mysql的客户端。我在网络上使用一台服务器和两个客户端进行了尝试。下线后,我物理断开了网络连接(拔下电缆)SELECT ... FOR UPDATE;。我需要使其他客户端能够立即tblone事务上使用(锁定它,更新它),为此,我认为在客户端A断开连接后,服务器应回滚客户端A的事务。


问题答案:

当您物理上断开客户端的连接时,您不会发送正常的断开连接(这会导致回滚),并且MySQL协议不是很健谈,因此服务器永远不会知道客户端不在那里。与客户端和服务器内部进行更多对话的其他数据库系统相比,我认为这是协议中的缺陷。

无论如何。您可以更改两个变量。他们基本上是相同的,只是针对不同的客户。

第一个是wait_timeout,它由Java或php之类的应用程序客户端使用。

另一个是interactive_timeout,它由mysql客户端使用(如您的测试中)

在这两种情况下,服务器都会在几秒钟后终止连接,并且这样做会回滚所有事务并释放所有锁。



 类似资料:
  • 问题内容: 我们正在使用 订阅主题。但是,我们经常遇到错误。我已经使用JavaScript客户端(mqttws31.js)测试了连接,效果很好。表示连接没有问题。 错误:- MQTT消息:- 配置 :- pom.xml: 在调试时:- 在上述方法中,有时会抛出。所以基于catch块,它使用 问题答案: 我只是想分享一下,以防万一。…我有相同的异常,并通过确保生成了唯一的客户端ID(使用 )来解决它

  • 问题内容: 当我使用节点mysql时,在12:00到2:00之间出现错误,表明服务器已关闭TCP连接。这是完整的消息: 有解决办法。但是,以这种方式尝试后,问题也会出现。现在我不知道该怎么办。有人遇到这个问题吗? 这是我按照解决方案编写的方式: 问题答案: 尝试使用以下代码来处理服务器断开连接: 在您的代码中,我错过了之后的部分

  • 当我运行大型查询(返回许多行的查询)时,我会得到期间失去与MySQL server的连接的错误,而且我看不出我做错了什么。我使用来自mysql.com的“新”mysql驱动程序(而不是“旧”的MySQLdb),以及与mamp捆绑在一起的mysql版本。Python 2.7。表未损坏,返回状态OK。下面是一个中断的例子: 这导致了我大部分时间得到的错误: 第20行是 PS:我暂时放弃了这一点,改为P

  • 问题内容: 在生产中,我有一个使用连接局部变量保存游戏状态的游戏。但是,我注意到,如果我在连接上闲置了一段时间,它将断开连接并重新连接,这将丢失当前状态。在本地主机上进行测试时,我从未注意到此行为。这是套接字连接的规范行为,还是导致连接断开的其他原因。 如果是正常行为,通常如何处理?是否应该将连接值全局存储,以便用户断开/重新连接时可以恢复连接值? 问题答案: 您的问题与套接字超时有关。如果某个套

  • 例外情况: com.health.dao.医院道义mpl.find医院邮编

  • 问题内容: 我有一个问题,如果mySQL Server在“睡眠时间” 500秒后终止了会话,则下一个请求不会成功。如果mySQL Server没有关闭睡眠连接,则可能在700秒后发生相同的问题。 我能做什么?遵循我的persistence.xml的属性 如果重要的话,transactiontype为RESOURCE_LOCAL。 问题答案: 您如何配置连接池?如果它是服务器数据源,则应在服务器中设