sql >> Database >  >> RDS >> Mysql

Hoe te controleren of 'MySQL-server is verdwenen'

U kunt de OperationalError-uitzondering opvangen en opnieuw verbinding maken.

from MySQLdb import OperationalError

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

Als u expliciet wilt controleren of de verbinding is verbroken voordat u query's uitvoert, kunt u een testquery uitvoeren om te controleren of de uitzondering optreedt.

Ik weet niet zeker in welke andere gevallen OperationalError wordt opgeworpen. Maar als u alleen de MySQL server has gone away fout, kunt u zoiets als dit doen.

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

het zal alleen de 'gone away'-fout opvangen en OperationalError-uitzonderingen die om andere redenen zijn opgeworpen, laten optreden.

UPDATE

Zoals ik in de opmerking al zei, zou mijn zoekfunctie er als volgt uitzien:

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)

Dat is slechts een voorbeeld en is mogelijk niet geschikt voor in uw geval. Het punt dat ik probeer te maken, is dat het beter is om verschillende functies voor verschillende dingen te hebben, zodat je deze situaties gemakkelijk aankunt.



  1. Verifieert MySQLi standaard servercertificaten bij gebruik van SSL?

  2. SQL is gelijk aan (=) Operator voor beginners

  3. Lege PHP-uitvoer uit MySQL-database voor een longblob

  4. Databasestructuur synchroniseren tussen applicaties