2015-02-05 7 views
6

Ich erhalte die folgenden jeden Tag. Meine Skripte laufen über Cron-Jobs. Kann jemand helfen, das zu beheben?MySQL-Server ist weg - Python

File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away') 

Mein Code:

def get_id(test_mysql_conn,id): 
    cursor = test_mysql_conn.cursor() 
    cursor.execute("""select id from test where id = %s """, (id)) 
    row = cursor.fetchone() 
    if row is not None: 
     return row[0] 
    return 0 
+1

Werfen Sie einen Blick auf diese Antwort: http://stackoverflow.com/a/982873/974317 –

+0

überprüfen [this] (http://dev.mysql.com/doc/refman/5.0/en/gone-away.html). –

+0

Zu Ihrer Information kann dieser Fehler auftreten, wenn Sie die maximale Paketgröße überschreiten: siehe [hier] (http://serverfault.com/a/528183/341327) – PlasmaBinturong

Antwort

1

Versuchen die follwing

if (os.getenv('SERVER_SOFTWARE') and os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')): 
      db = MySQLdb.connect(unix_socket = UNIX_SOCKET + INSTANCE_NAME, host =" HOST/IP", db = "DB_Name", user = "User_Name") //if your mysql is on google server 
     else: 
      db = MySQLdb.connect(host = "HOST/IP", port = "Port_number", db = "DB_name", user = "User_Name", passwd = "password") 

    cursor = db.cursor() 
    cursor.connection.autocommit(True) 

except Exception, err: 
    logging.info("Error In DataBase Connection : " + traceback.format_exc()) 
    return 'DataBaseProblem'   
try: 
    sql = query+str(req_args) 
    logging.info("QUERY = "+str(sql)) 
    cursor.execute(sql) 
    procedureResult = cursor.fetchall(); 
    if str(procedureResult) == '()': 
     logging.info("Procedure Returned 0 Record") 
     procedureResult = 'DataBaseProblem' 


    #logging.info("procedureResult : " + str(procedureResult)) 
except Exception, err: 
    #trackBack = str (traceback.format_exc()) 
    #raise Exception('DataBaseProblem',trackBack) 
    procedureResult="DataBaseProblem" 

für MySQL-Portnummer 3306

0

Dies geschieht, wenn Sie eine MySQL-Verbindung öffnen, aber nicht schließen es. Es gibt eine Zeitüberschreitung auf der Seite von MySQL.

Eine Sache, die Sie tun können, ist die Verbindung zu schließen, wenn Sie damit fertig sind. Eine andere wäre, ein ORM zu verwenden, das dieses unterstützt oder das eingebaute Pooling (SQLAlchemy ist ein ich glaube.)