我做了一些没有提交的查询。然后应用程序被停止。
如何显示这些未结交易并提交或取消它们?
如何显示这些未结交易并提交或取消它们?
没有打开的事务,MySQL 将在断开连接时回滚事务。
您无法提交事务 (IFAIK)。
您使用显示线程
SHOW FULL PROCESSLIST
See: http://dev.mysql.com/doc/refman/5.1/en/thread-information.html
它不会对您有帮助,因为您无法从断开的连接提交事务。
连接中断时会发生什么
来自 MySQL 文档:http://dev.mysql.com/doc/refman/5.0/en/mysql-tips.html
4.5.1.6.3。禁用 mysql 自动重新连接
如果mysql客户端在发送语句时失去与服务器的连接,它会立即自动尝试重新连接到服务器并再次发送语句。However,即使mysql重新连接成功,你的第一个连接也已经结束并且你之前的所有会话对象和设置are lost:临时表、自动提交模式、用户定义变量和会话变量。还,任何当前事务都会回滚.
此行为可能对您来说很危险,如以下示例所示,服务器在第一条语句和第二条语句之间关闭并重新启动,而您却毫不知情:
另请参阅:http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html
如何诊断和解决这个问题
检查自动重新连接:
如果确实发生自动重新连接(例如,由于调用 mysql_ping()),则没有明确的指示。要检查是否重新连接,请致电mysql_thread_id()
在调用之前获取原始连接标识符mysql_ping()
,然后调用mysql_thread_id()
再次查看标识符是否已更改。
确保将最后一个查询(交易)保留在客户端中,以便您可以在需要时重新提交。
并禁用自动重新连接模式,因为这很危险,请改为实现您自己的重新连接,以便您知道何时发生丢弃并且可以重新提交该查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)