Domanda

Qui il mio frammento di codice:

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

e il registro corrispondente che ho:

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

Normalmente il mio programma funziona perfettamente (funziona su un server e accetta connessioni dai client), ma ogni mattina quando ho provato a collegarlo, ricevo messaggi sopra.

Quale può essere il problema con MySQL Server?

È stato utile?

Soluzione

Dal Manuale MySQL:

Il motivo più comune per il server MySQL è andato via l'errore è che il server è scaduto e chiuso la connessione.

...

Per impostazione predefinita, il server chiude la connessione dopo otto ore se non è successo nulla. È possibile modificare il limite di tempo impostando il wait_timeout variabile quando si avvia mysqld.

...

Se hai uno script, devi solo emettere nuovamente la query per il client per effettuare una riconnessione automatica. Ciò presuppone di avere una riconnessione automatica nel client abilitato (che è il valore predefinito per il mysql Cliente di comando).

Vedere questa pagina manuale Per maggiori dettagli su questo errore.

Altri suggerimenti

So che questo è vecchio ma sembra essere il primo hit di Google per "MySQL Server è andato via QMYSQL: Impossibile eseguire la query".

Sembra che qsqldatabase :: isopen () restituirà comunque vero anche se non abbiamo più una connessione. Ecco come lo prendo:

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

Sono stato in grado di imitare questa situazione riavviando il server con il riavvio di "/etc/init.d/mysql" e continuare a inviare query ad essa e alla fine lancia questo errore. Sento che questo non dovrebbe essere modificato sul lato server, in effetti 8 ore sembrano estremamente lunghi per mantenere aperta una connessione inattiva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top