如何快速检测mysql服务器的down状态

时间:2012-10-10 09:32:20

标签: c++ mysql c api

我有一个连接远程数据库服务器的应用程序。

如果mysql服务器出于某种原因而停止并且之后成功,那么我的应用程序无法快速检测到服务器状态。重新连接到数据库服务器需要将近20秒。所以我的gui冻结了。我不希望gui冻结20秒

到目前为止,我试过

  • mysql_ping
  • mysql_real_connect

功能

  • MYSQL_OPT_RECONNECT
  • MYSQL_OPT_CONNECT_TIMEOUT

    选项

我的环境不是多线程的。所以 如何做更快的检测?

3 个答案:

答案 0 :(得分:3)

如果您同步进行网络连接,请准备好冻结。出于这个原因,在单独的线程中进行数据操作是有意义的。

答案 1 :(得分:0)

您可以尝试telnet到mysql端口(通常是3306)。如果你的连接被拒绝,那么mysql就没有收听。

工作。

root@XXXXXX:~# telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
L
5.6.4-m7)#m#_8:W�hP5YBzaXs[MOmysql_native_password

向下。

root@XXXXXX:~# telnet localhost 3306
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

被拒绝的消息几乎是即时的。

答案 2 :(得分:0)

正如其他人已经讨论的那样,我不会谈论使用多个线程或进程。你能在tcp上连接你的mysql服务器吗?在大多数情况下,你会立即收到一个tcp fin来表示一个已关闭的连接,尽管有时甚至可能不是这种情况。但是大多数强大的应用程序都做得很好。

shell> mysql --protocol=TCP

MYSQL how to specify protocol

如果服务器不接受它,我相信它可以从配置设置启用。

但是,这并未解决服务器突然脱离网络或客户端连接断开等情况。