sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat, zda „Server MySQL zmizel“

Můžete zachytit výjimku OperationalError a znovu se připojit.

from MySQLdb import OperationalError

try:
    my_sql_operation()
except OperationalError as e:
    #do what you want to do on the error
    reconnect()
    print e

Pokud chcete před spuštěním dotazů explicitně zkontrolovat, zda je připojení ukončeno, můžete spustit testovací dotaz a zkontrolovat, zda k výjimce došlo.

Nejsem si jistý, v jakých dalších případech se objevila chyba OperationalError. Ale pokud chcete zachytit pouze MySQL server has gone away chyba, můžete udělat něco takového.

from MySQLdb import OperationalError

try:
    my_sql_operation()
except OperationalError as e:
    if 'MySQL server has gone away' in str(e):
        #do what you want to do on the error
        reconnect()
        print e
    else:
        raise e()

zachytí pouze chybu „gone away“ a nechá vyvolat výjimky OperationalError vyvolané z jiných důvodů.

AKTUALIZACE

Jak jsem řekl v komentáři, moje funkce dotazování by byla takto:

def fetch_data(query):
    try:
        cursor = conn.Cursor()
        cursor.execute(query)
        return cursor.fetchall()
    except OperationalError as e:
        reconnect()
        print 'reconnecting and trying again...'
        fetch_data(query)

To je jen příklad a ve vašem případě nemusí být vhodný. Snažím se zdůraznit, že je lepší mít různé funkce pro různé věci, abyste tyto situace mohli snadno zvládnout.



  1. Mohou uložené procedury vrátit sadu výsledků?

  2. Průsečíky SQL a ukázky

  3. Ověřování vašich záloh PostgreSQL na Dockeru

  4. CHYBA 1396 (HY000):Operace DROP USER selhala pro 'user'@'localhost'