2013-07-18 48 views
0

我正在为我们的mysql服务器编写一个基础结构库。 我必须处理的场景之一是从MySQL服务器暂时断开连接。在mysql上处理(ER_QUERY_INTERRUPTED)的策略

测试场景是从数据库100000附近开始,然后停止数据库并将其恢复。

在这种情况下,我对在停止期间运行的查询有意识地收到ER_QUERY_INTERRUPTED错误。 的问题是:

我可以承担有关分贝(如不启动查询)的状态东西认为这是由于未定义behaiviour落这个问题倒链用户?

+0

只要您在交易中执行此操作,就可以安全地重新尝试查询。事务中的断开连接将导致SQL服务器上的自动回滚。如果您处于事务之外,则查询_可能已提交,或_可能不是_。再次插入可能会导致重复的数据。 –

+0

@ColinMorelli:如果有人使用事务性存储引擎,比如'InnoDB',那么所有的操作都是“在一个事务中”(虽然它们可能会自动提交)。 – eggyal

+0

@eggyal我的意思是一个非自动提交事务。如果你没有_explicitly_发送'COMMIT',你不能确定在断开连接期间是否执行了查询。 –

回答

0

经过一番测试后,出现了以下回答。 我们(和大多数人)使用默认模式为事务的InnoDB。因为如果ER_QUERY_INTERRUPTED发送到客户端,服务器上的查询将回滚。由于这种情况,在这种情况下的错误处理策略将仅仅是重新提交所有具有这种错误的查询。