Joh*_*ica 56
如何显示这些打开的交易并提交或取消它们?
没有开放事务,MySQL将在重新连接时回滚事务.
您无法提交交易(IFAIK).
您使用显示线程
SHOW FULL PROCESSLIST
Run Code Online (Sandbox Code Playgroud)
请参阅: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客户端在发送语句时失去与服务器的连接,它会立即自动尝试重新连接一次到服务器并再次发送语句.但是,即使mysql成功重新连接,您的第一个连接也已结束,所有先前的会话对象和设置都将丢失:临时表,自动提交模式以及用户定义和会话变量.此外,任何当前事务都会回滚.
这种行为对您来说可能是危险的,如下例中服务器在第一个和第二个语句之间关闭并重新启动而您不知道它:
另请参阅:http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html
如何诊断和修复此问题
要检查自动重新连接:
如果确实发生了自动重新连接(例如,由于调用mysql_ping()),则没有明确的指示.要检查重新连接,请
mysql_thread_id()在呼叫前调用以获取原始连接标识符mysql_ping(),然后mysql_thread_id()再次调用以查看标识符是否已更改.
确保将最后一个查询(事务)保留在客户端中,以便在需要时可以重新提交.
并禁用自动重新连接模式,因为这是危险的,而是实现您自己的重新连接,以便您知道何时发生丢弃并且您可以重新提交该查询.
San*_*Lee 38
虽然在这种情况下不会有任何剩余的交易,正如@Johan所说,如果你愿意,你可以通过下面的查询看到InnoDB中的当前交易清单.
SELECT * FROM information_schema.innodb_trx\G
从文件:
INNODB_TRX表包含有关当前在InnoDB内执行的每个事务(不包括只读事务)的信息,包括事务是否在等待锁定,事务何时启动以及事务正在执行的SQL语句(如果有).
Mar*_*c B 27
您可以使用show innodb status(或show engine innodb status更新版本的mysql)获取InnoDB引擎中当前待处理的所有操作的列表.埋在输出的墙上将是交易,以及他们正在运行的内部流程ID.
您将无法强制提交或回滚这些事务,但是您可以终止运行它们的MySQL进程,这实际上归结为回滚.它会杀死进程的连接并导致MySQL清理它剩下的混乱.
这是您想要寻找的内容:
------------
TRANSACTIONS
------------
Trx id counter 0 140151
Purge done for trx's n:o < 0 134992 undo n:o < 0 0
History list length 10
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 17004, OS thread id 140621902116624
MySQL thread id 10594, query id 10269885 localhost marc
show innodb status
Run Code Online (Sandbox Code Playgroud)
在这种情况下,现在只有一个与InnoDB引擎的连接(我的登录,运行show查询).如果那条线是你想要终止的实际连接/卡住交易,那么你就做了kill 10594.
| 归档时间: |
|
| 查看次数: |
107577 次 |
| 最近记录: |