Сервер MySQL ушел
-
26-09-2019 - |
Вопрос
Здесь мой кодовый фрагмент:
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?
Решение
Из Mysql Manual.:
Наиболее распространенная причина для MySQL Server ушла погрешна, заключается в том, что сервер истек и закрыл соединение.
...
По умолчанию сервер закрывает соединение через восемь часов, если ничего не произошло. Вы можете изменить ограничение по времени, установив
wait_timeout
переменная при запуске mysqld....
Если у вас есть скрипт, вам просто нужно снова выдать запрос для клиента, чтобы сделать автоматическую переподключение. Это предполагает, что у вас есть автоматическая переподключение к включению клиента (что по умолчанию для
mysql
Клиент командной строки).
Видеть Это руководство Для получения более подробной информации об этой ошибке.
Другие советы
Я знаю, что это старое, но оказывается первым ударом Google для «MySQL Server ушел QMysql: невозможно выполнить запрос».
Похоже, QSQLDATATABASE :: ISOPEN () все равно вернутся, даже если у нас больше нет связи. Вот как я его ловлю:
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 часов кажется очень долго, чтобы держать бездействующую связь.