我知道这里有很多类似的问题,当我谷歌时它也有很多结果,但没有一个能回答我的问题.我读了这个,这个,这个和这个,但它们都不适合我.我不谈任何锁,我不想使用MySQL c ++连接器,只是C API.
另外,这里非常重要:我在LINUX上这样做.我为什么提这个?因为在mysql_options的文档中:
MYSQL_OPT_READ_TIMEOUT - ...This option works only for TCP/IP connections and, prior to MySQL 5.0.25, only for Windows. MYSQL_OPT_WRITE_TIMEOUT- ... This option works only for TCP/IP connections and, prior to MySQL 5.0.25, only for Windows
那么,有没有办法为5.0.25之前的版本设置查询超时?
我的MySQL版本:
[root@xxx kiril]# mysql --version mysql Ver 14.12 Distrib 5.0.22, for redhat-linux-gnu (i686) using readline 5.0
编辑:至少,有没有办法取消查询?我可以启动一个计时器作为不同的线程,但当它到期..我可以以某种方式取消查询?
好的,我找到了解决方案。感谢Will和PRR(我的同事)。
我无法在每个查询上启动一个新线程,因为这是一个实时应用程序,每秒应该处理 1000 多条消息..(无论如何,感谢R..的想法)。
此外,无法通过库终止连接,也无法取消/终止查询,因为问题出在数据库服务器中。
这是一个强力解决方案,但仍然更好_EXIT( FAILURE ):这是相关问题:“如何在 Linux 上强制关闭套接字?” - 所以,我刚刚使用系统调用关闭了套接字。
重要提示:(感谢 Will)-事实证明,我们的 MySQL 库包装器具有“故障安全”标志,因此在关闭的套接字(或其他严重错误)上,它会尝试“解决”问题,因此它会重新打开就我而言,套接字本身。所以,我只是关闭了这个选项,现在一切都很好 - 由于异常,执行被终止 - 这是执行此操作的“最软”方法。
当然,这应该通过另一个线程来完成 - 例如计时器。
编辑:超时对于 5.0.25 之后的版本确实有效。但是,至少在 RHEL4 和 RHEL5 上,由于某种原因超时增加了两倍!例如,如果某些超时设置为 20 秒,则实际超时约为 60 秒。
此外,另一件重要的事情是,这些超时(与任何其他选项一样)必须在 或之前mysql_init和之后 设置。 mysql_connectmysql_real_connect