【问题标题】:MySQL server has gone away Error while Selecting rows from a tableMySQL 服务器在从表中选择行时出现错误
【发布时间】:2009-07-16 07:10:32
【问题描述】:

使用带有 Mysql C API 的 C 程序连接到数据库并且启动成功但尝试执行 SELECT 、INSERT 操作它会引发错误“MySQL 服务器已消失” on我的 VPS 服务器,但在本地也可以正常工作。

VPS Server Mysql Server 版本为 : 5.0.81-community MySQL 社区 版(GPL)。 wait_timeout 值:28800

本机Mysql Server版本为 : 5.0.77 源码分发。

但是使用 Php 访问同一个数据库它可以正常工作,没有任何问题(本地和 vps 服务器)只有在使用 Mysql C API 调用时才会发生。

int fetch_information_from_tbl()
{
        MYSQL_RES *result;
        MYSQL_ROW row;
        char query_def1[100];
        unsigned int num_fields;
        int tblid;

       /***EDITED FOR MORE INFORMATION START ***/
       // Tried to ping and set reconnection still the same error
       /* try a ping */
       if (mysql_ping(mysql)) {
           fprintf(stderr, "Cannot ping database: Error: %s\n",mysql_error(mysql));
            }
        my_bool reconnect = 0;
       if(mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect)){
           fprintf(stderr, "Mysql Option Error: %s\n",mysql_error(mysql));
        }
       /***EDITED FOR MORE INFORMATION  ENDS***/

        sprintf(query_def1, "SELECT tblid FROM test_table");
        if (mysql_query(mysql, query_def1)) {
        fprintf(stderr, "%s\n", mysql_error(mysql));
        exit(1);
        }

        result = mysql_store_result(mysql);
        num_fields = mysql_num_fields(result);
        row = mysql_fetch_row(result);
        if (row) 
        {
                tblid = atoi(row[0]);
                printf("Fetched Table ID is: %d\n",tblid)
        }

}

执行这样的mysql查询是正确的方法还是建议更好的方法来做到这一点? 执行 SELECT OPERATION 时出现的这个错误会是什么情况?提前致谢。

【问题讨论】:

    标签: mysql c database api


    【解决方案1】:

    你需要使用 mysql_ping 来检查你的连接是否还在。 请检查您的 mysql 服务器的 mysql idle time out 属性。如果在特定时间段内客户端和服务器之间没有任何活动,则服务器将关闭连接。您可以更改它或使用 mysql_ping 来恢复您的连接。

    如果是 php,我猜它会为每个查询连接到服务器并断开相同的连接。

    【讨论】:

    • 谢谢尼兰詹。我尝试使用 mysql_ping(mysql) 它抛出了同样的错误:MySQL 服务器已经消失。那么会是什么情况呢?以及如何查看mysql空闲时间值?
    • 请谷歌搜索信息。连接时使用 mysql_option 打开 auto_reconnect。请检查此dev.mysql.com/doc/refman/5.0/en/mysql-ping.html
    • 我尝试使用 mysql_options 重新连接,但输出没有任何变化。我已经尝试过dev.mysql.com/doc/refman/5.0/en/gone-away.html 中描述的方法无法解决。
    • 你应该在 mysql_connect 或 mysql_real_connect 之前使用 mysql_option。
    • 你能粘贴应用程序的整个代码吗?尤其是您使用 mysql_real_connect 的部分
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2020-12-18
    • 2017-11-07
    • 1970-01-01
    • 2016-03-26
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多