MySQL服务器已经消失了

时间:2010-09-01 06:08:04

标签: c++ mysql qt mysql-error-2006

这是我的代码段:

query.next();
qDebug()<<query.lastError();
qlonglong res=query.value(0).toLongLong();
qDebug()<<query.lastError();

以及我的相应日志:

Debug: QSqlError(2006, "QMYSQL: Unable to execute query", "MySQL server has gone away") 
Warning: QSqlQuery::value: not positioned on a valid record
Debug: QSqlError(2006, "QMYSQL: Unable to execute query", "MySQL server has gone away")

通常我的程序运行正常(它可以在服务器上运行并接受来自客户端的连接),但每天早上当我尝试连接它时,我都会收到上面的消息。

MySQL服务器有什么问题?

2 个答案:

答案 0 :(得分:2)

来自MySQL Manual

  

MySQL服务器消失的最常见原因是服务器超时并关闭了连接。

     

...

     

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

     

...

     

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

有关此错误的详细信息,请参阅this manual page

答案 1 :(得分:2)

我知道这已经老了,但恰好是第一个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小时似乎非常长,以保持空闲连接打开。