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
}
}