Question

Voici mon extrait de code:

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

et le journal correspondant je:

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")

Normalement fonctionne mon programme très bien (il fonctionne sur un serveur et accepte les connexions des clients), mais tous les matins quand j'ai essayé de le connecter, je reçois des messages ci-dessus.

Qu'est-ce que peut être le problème avec le serveur MySQL?

Était-ce utile?

La solution

De MySQL Manuel :

  

La raison la plus commune pour le serveur MySQL a disparu erreur est que le serveur a expiré et a fermé la connexion.

     

...

     

Par défaut, le serveur ferme la connexion au bout de huit heures si rien est arrivé. Vous pouvez modifier la limite de temps en réglant la variable wait_timeout lorsque vous démarrez mysqld.

     

...

     

Si vous avez un script, il vous suffit de publier à nouveau la requête pour le client de faire une reconnection automatique. Cela suppose que vous avez reconnexion automatique dans le client activé (ce qui est la valeur par défaut pour le client mysql ligne de commande).

Voir cette page de manuel pour plus de détails sur cette erreur.

Autres conseils

Je sais que c'est vieux, mais se trouve être le premier succès de Google pour « serveur MySQL a disparu QMYSQL: Impossible d'exécuter la requête ».

Il semble QSqlDatabase :: isOpen () retourne toujours vrai, même si nous n'avons plus d'une connexion. Voici comment je l'attrape:

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

J'ai pu imiter cette situation en redémarrant le serveur avec « redémarrage /etc/init.d/mysql » et continuer à envoyer des requêtes à lui et il jette par la suite cette erreur. Je pense que ce ne doit pas être changé côté serveur, en fait 8 heures semble très longue pour maintenir une connexion inactive ouverte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top