gpt4 book ai didi

c++ - 如何使用 C API 为 MySQL 查询设置超时

转载 作者:可可西里 更新时间:2023-11-01 06:33:49 25 4
gpt4 key购买 nike

我知道这里有很多类似的问题,也有很多结果,当我用谷歌搜索时,但没有一个能回答我的问题。我读了this , this , thisthis但它们都不适合我。我不谈论任何锁,我不想使用 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 --versionmysql  Ver 14.12 Distrib 5.0.22, for redhat-linux-gnu (i686) using readline 5.0

编辑:至少,有什么办法可以取消查询吗?我可以将计时器作为不同的线程启动,但是当它到期时..我可以以某种方式取消查询吗?

最佳答案

好的,我找到了解决方案..感谢WillPRR(我的同事)。

不能在每个查询上启动一个新线程,因为这是一个实时应用程序,应该每秒处理 1000 多条消息..(无论如何,感谢 R..这个想法)。

此外,无法通过库终止连接,也无法取消/终止查询,因为问题出在数据库服务器中。

这是一个蛮力解决方案,但仍然比 _EXIT( FAILURE ) 要好得多:这是相关问题:"How to force closing socket on Linux?" - 所以,我只是使用系统调用关闭了套接字。

重要提示:(感谢 Will)- 事实证明,我们的 MySQL 库包装器具有“故障安全”标志,因此在关闭套接字(或其他严重错误)时,它会尝试“解决”问题,因此在我的情况下,它会自行重新打开套接字。所以,我只是关闭了这个选项,现在一切都很好 - 执行因异常而终止 - 这是执行此操作的“最软”方法。
当然,这应该通过另一个线程来完成 - 例如计时器。

编辑:超时对于 5.0.25 之后的版本确实有效。但是,至少在 RHEL4 和 RHEL5 上,由于某种原因超时增加了三倍!例如,如果某些超时设置为 20 秒,则实际超时为 ~60 秒..
此外,另一件重要的事情是,这些超时(与任何其他选项一样) 必须设置在 之后 mysql_init之前> mysql_connectmysql_real_connect

关于c++ - 如何使用 C API 为 MySQL 查询设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com