Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MySQL服务器已经消失了_C++_Mysql_Qt_Mysql Error 2006 - Fatal编程技术网

C++ MySQL服务器已经消失了

C++ MySQL服务器已经消失了,c++,mysql,qt,mysql-error-2006,C++,Mysql,Qt,Mysql Error 2006,下面是我的代码片段: query.next(); qDebug()<<query.lastError(); qlonglong res=query.value(0).toLongLong(); qDebug()<<query.lastError(); 通常情况下,我的程序工作正常(它在服务器上工作,并接受来自客户端的连接),但每天早上当我尝试连接它时,我都会收到上面的消息 MySQL服务器可能有什么问题?来自: MySQL服务器出现错误的最常见原因是服务器超时并关闭了连

下面是我的代码片段:

query.next();
qDebug()<<query.lastError();
qlonglong res=query.value(0).toLongLong();
qDebug()<<query.lastError();
通常情况下,我的程序工作正常(它在服务器上工作,并接受来自客户端的连接),但每天早上当我尝试连接它时,我都会收到上面的消息

MySQL服务器可能有什么问题?

来自:

MySQL服务器出现错误的最常见原因是服务器超时并关闭了连接

默认情况下,如果未发生任何事情,服务器将在八小时后关闭连接。启动mysqld时,您可以通过设置
wait\u timeout
变量来更改时间限制

如果您有一个脚本,您只需再次发出查询,客户端就可以自动重新连接。这假设您在客户端中启用了自动重新连接(这是
mysql
命令行客户端的默认设置)


有关此错误的更多详细信息,请参阅。

我知道这是一个很老的错误,但恰好是google首次点击“MySQL服务器已消失QMYSQL:无法执行查询”

即使我们不再有连接,QSqlDatabase::isOpen()似乎仍将返回true。我是这样理解的:

QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
QString q = "SELECT * FROM myTable;";
if (!query.exec(q))
{
    int err = query.lastError().number();
    if (err == 2006) // Might want to do #2013 here also?
    {
        db.close();
        if (db.open() && !query.exec(q))
        {
            // handle error here we still failed...
        }
    }
    else
    {
        // handle normal query errors here
    }
}

我可以通过使用“/etc/init.d/mysql restart”重新启动服务器来模拟这种情况,并不断向服务器发送查询,最后它会抛出这个错误。我觉得这不应该在服务器端更改,事实上,保持空闲连接打开8小时似乎非常长。

正如Alexander在他的回答中所说的
wait\u timeout
可以用来更改超时时间,因此如果8小时对您来说太多,那么很容易修改。否则,TCP连接是无状态的。如果您没有传输数据,您可以在晚上断开以太网电缆,在早上重新连接,您的连接将按预期恢复。在Qt中,
isOpen()
只是一个内存标志。最后,我有24/7/365运行的应用程序,有一段时间8个小时可以不点击。。。虽然这是相对罕见的。
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
QString q = "SELECT * FROM myTable;";
if (!query.exec(q))
{
    int err = query.lastError().number();
    if (err == 2006) // Might want to do #2013 here also?
    {
        db.close();
        if (db.open() && !query.exec(q))
        {
            // handle error here we still failed...
        }
    }
    else
    {
        // handle normal query errors here
    }
}