Сервер MySQL ушел - PullRequest
       18

Сервер MySQL ушел

2 голосов
/ 01 сентября 2010

Вот мой фрагмент кода:

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 ]

2 голосов
/ 25 февраля 2013

Я знаю, что это старая версия, но это первый гугл-запрос на "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 часов, кажется, слишком долго, чтобы поддерживать свободное соединение.

2 голосов
/ 01 сентября 2010

Из MySQL Manual :

Самая распространенная причина, по которой сервер MySQL исчезает, заключается в том, что сервер отключил тайм-аут и закрыл соединение.

...

По умолчанию сервер закрывает соединение через восемь часов, если ничего не произошло. Вы можете изменить ограничение по времени, установив переменную wait_timeout при запуске mysqld.

...

Если у вас есть сценарий, вам просто нужно снова выполнить запрос, чтобы клиент выполнил автоматическое переподключение. Это предполагает, что у вас включено автоматическое переподключение в клиенте (по умолчанию для клиента командной строки mysql).

См. эту страницу руководства для получения более подробной информации об этой ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...