【问题标题】:how to set mysql_ping timeout with MySQL++如何使用 MySQL++ 设置 mysql_ping 超时
【发布时间】:2011-07-02 01:48:47
【问题描述】:

我希望 mysql_ping 在几秒钟内超时。在下面的测试用例中,如果在“ifconfig eth0 down”之后建立了连接,则永远不会到达 conn.ping() 的错误端。线程/进程进入看似无休止的等待。我想更改它并使其超时更快,最好使用 MySQL++ 选项。知道可能是哪个选项吗?

也许我还需要设置它会重试多少次?

阅读 MySQL 的文档,它告诉我们 mysql_ping 将尝试自动重新连接。这很好,但最终我也希望它超时。

http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html http://dev.mysql.com/doc/refman/5.1/en/mysql-ping.html

由于它会自动重新连接,MYSQL_OPT_CONNECT_TIMEOUT 似乎是要走的路。但是在下面的测试用例中设置 mysqlpp::ConnectTimeoutOption(1) 没有帮助。

似乎 MySQL++ ping() 只是 C API 的一个包装器,我从“/usr/include/mysql++/dbdriver.h”中收集到它,它将 ping() 定义为:

bool ping() { return !mysql_ping(&mysql_); }

我使用的库版本是:

  • libmysql++-dev: 3.0.9-1+b1
  • libmysql++3: 3.0.9-1+b1
  • mysql-client-5.1: 5.1.49-3
  • 
    #include <iostream>
    #include <mysql++/mysql++.h>
    
    //g++ -o test -I/usr/include/mysql/ -lmysqlpp testcase_mysql_timeout.cpp
    int main(int argc, char *argv[]) {
        mysqlpp::Connection conn;
    
        conn = mysqlpp::Connection(true);
        try {
            conn.set_option(new mysqlpp::MultiStatementsOption(true));
            conn.set_option(new mysqlpp::ConnectTimeoutOption(1));
            conn.set_option(new mysqlpp::InteractiveOption(true));
        }
        catch (mysqlpp::BadOption &e) {
            std::cerr << "ConnectDB exception: " << e.what() << std::endl;
        }
        conn.connect("MyDB", "my.dyndns.org", "user", "password", 3306);
    
        while(1) {
            if (!conn.ping()) {
                std::cout << "Host not reachable. Try to reconnect?" << std::endl;
            }
            else {
                std::cout << "Host is reachable all is good." << std::endl;
            }
            usleep(1000000);
        }
    }
    
    

    【问题讨论】:

      标签: c++ mysql timeout mysql++ connection-timeout


      【解决方案1】:

      恐怕我必须回答我自己的问题:)

      阅读更多 MySQL 文档给出了答案。在这种情况下设置连接超时的作用很小。它仍然需要等待 TCP/IP Close_Wait_Timeout,默认为 10 分钟:

      http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html

      MYSQL_OPT_READ_TIMEOUT(参数类型:unsigned int *)

      尝试从服务器读取的超时时间(以秒为单位)。每次尝试都使用这个超时值,并且在必要时会重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便在 TCP/IP Close_Wait_Timeout 值 10 分钟之前检测到丢失的连接。在 MySQL 5.1.41 之前,此选项仅适用于 TCP/IP 连接,在 MySQL 5.1.12 之前,仅适用于 Windows。

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 1970-01-01
        • 2011-11-11
        • 2012-01-08
        • 2019-04-05
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多