2012-04-13 1 views
0

Ich benutze mysqldb/python, um einige Daten in eine mysql db zu pushen.MYSQL - Server wird mitten in einem Skript beendet

Das Skript analysiert eine Reihe von XML-Dateien für die Daten.

Der MySQL-Server scheint zu beenden und gibt mir ein # 2002 - Der Server reagiert nicht (oder der Socket des lokalen MySQL-Servers ist nicht korrekt konfiguriert) Fehler in der Mitte der Transaktionen - an einem anderen Ort jedes Mal wenn ich laufe es (so gehe ich davon aus ist es nicht ein bestimmtes Stück von Daten, die es nicht umfallen macht ...)

es funktioniert perfekt, bis es ~ 12 oder 13 Datei erreicht und es gibt mir diese Fehlermeldung:

Error 2003: Can't connect to MySQL server on 'localhost' (10055) 
Traceback (most recent call last): 
File "sigFileParser.py", line 113, in <module> 
doParser(sigfile_filename) 
File "sigFileParser.py", line 106, in 
doParser 
    doFormatsPush(packedFormats) 
File "sigFileParser.py", line 27, in 
doFormatsPush 
sys.exit (1) 
NameError: global name 'sys' is not defined 

Sobald der Fehler auftritt, kann ich nicht in die MySQL-Konsole oder über PHOPmyadmin

gelangen

Wenn ich, wenn für eine Weile verlassen, kann ich in MySQL zurück

MySQL-Tabellen:

CREATE TABLE IF NOT EXISTS patterns 
(Version int(3), 
DateCreated DATETIME, 
SigID int(4), 
SigSpecificity CHAR(10), 
ByteSeqReference CHAR(12), 
MinFragLength int(4), 
Position int(4), 
SubSeqMaxOffset int(4), 
SubSeqMinOffset int(4), 
Pattern TEXT) 

und

CREATE TABLE IF NOT EXISTS formats 
(Version int(3), 
DateCreated DATETIME, 
FormatID int(4), 
FormatName TEXT, 
PUID TEXT, 
FormatVersion TEXT, 
FormatMIMEType TEXT, 
InternalSignatureID int(4), 
Extension TEXT, 
HasPriorityOverFileFormatID int(4)) 

Py Code

from lxml import etree 
import re, os, MySQLdb 
def doPatternPush(packedPatterns): 
try: 
    db = MySQLdb.connect (host = "localhost", user = "root", passwd = "", db = "sigfiles") 
    c = db.cursor() 
    c.execute('''INSERT INTO sigfiles.patterns 
    (Version,DateCreated,SigID,SigSpecificity,ByteSeqReference,MinFragLength,Position,SubSeqMaxOffset,SubSeqMinOffset,Pattern) 
    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''', packedPatterns) 
    db.commit() 
    except MySQLdb.Error, e: 
    print "Error %d: %s" % (e.args[0], e.args[1]) 
    sys.exit (1) 
return (db) 
def doFormatsPush(packedFormats): 
try: 
    db = MySQLdb.connect (host = "localhost", user = "root", passwd = "", db = "sigfiles") 
    c = db.cursor() 
    c.execute('''INSERT INTO sigfiles.formats 
    (Version,DateCreated,FormatID,FormatName,PUID,FormatVersion,FormatMIMEType,InternalSignatureID,Extension,HasPriorityOverFileFormatID) 
    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''', packedFormats) 
    db.commit() 
except MySQLdb.Error, e: 
    print "Error %d: %s" % (e.args[0], e.args[1]) 
    sys.exit (1) 
return(db) 
def doParser(sigfile_filename): 
tree = etree.parse(sigfile_filename) 
root = tree.getroot() 
attributes = root.attrib 
if 'DateCreated' in root.attrib: 
    DateCreated = (attributes["DateCreated"]) 
if 'Version' in root.attrib: 
    Version = (attributes["Version"]) 
##--------- get internal sig details ------------------ 
for a in range (len(root[0])): #loops for sig ID 
    attributes = root[0][a].attrib 
    SigID=(attributes["ID"]) 
    SigSpecificity = (attributes["Specificity"]) 
    for b in range (len(root[0][a])): # loops for sequence pattern inside each sig 
    attributes = root[0][a][b].attrib 
    if 'Reference' in root[0][a][b].attrib: 
    ByteSeqReference = (attributes["Reference"]) 
    else: 
    ByteSeqReference = "NULL" 
    attributes = root[0][a][b][0].attrib 
    if 'MinFragLength' in root[0][a][b][0].attrib: 
    MinFragLength=(attributes["MinFragLength"]) 
    else: 
    MinFragLength='' 
    if 'Position' in root[0][a].attrib: 
    Position=(attributes["Position"]) 
    else: 
    Position='' 
    if 'SubSeqMaxOffset' in root[0][a][b][0].attrib: 
    SubSeqMaxOffset=(attributes["SubSeqMaxOffset"]) 
    else: 
    SubSeqMaxOffsee = '' 
    if 'SubSeqMinOffset' in root[0][a][b][0].attrib: 
    SubSeqMinOffset=(attributes["SubSeqMinOffset"]) 
    else: 
    SubSeqMinOffset = ''  
    Pattern = root[0][a][b][0][0].text 
    packedPatterns =  [Version,DateCreated,SigID,SigSpecificity,ByteSeqReference,MinFragLength,Position,SubSeqMaxOffset,SubSeqMinOffset,Pattern] 
    doPatternPush(packedPatterns) 
##-------- get format ID details------------- 
for a in range (len(root[1])): 
    attributes = root[1][a].attrib 
    if 'ID' in root[1][a].attrib: 
    FormatID = (attributes['ID']) 
    else: 
    FormatID = "NULL" 
    if 'Name' in root[1][a].attrib: 
    FormatName = (attributes['Name']) 
    else: 
    FormatName = "NULL" 
    if 'PUID' in root[1][a].attrib: 
    PUID = (attributes['PUID']) 
    else: 
    PUID = "NULL" 
    if 'Version' in root[1][a].attrib: 
    FormatVersion = (attributes['Version']) 
    else: 
    FormatVersion = "NULL" 
    if 'MIMEType' in root[1][a].attrib: 
    FormatMIMEType = (attributes['MIMEType']) 
    else: 
    FormatMIMEType = "NULL" 
    InternalSignatureID,Extension,HasPriorityOverFileFormatID = ('', 'NULL', '') 
    for b in range (len(root[1][a])): #extracts the tags for each format ID 
    tagType = root[1][a][b].tag 
    tagText = root[1][a][b].text 
    tagType = re.sub('{http://www.nationalarchives.gov.uk/pronom/SignatureFile}', '', tagType) 
    if tagType == 'InternalSignatureID': 
    InternalSignatureID = tagText 
    elif tagType == 'Extension': 
    Extension = tagText 
    HasPriorityOverFileFormatID = '' 
    else: 
    HasPriorityOverFileFormatID = tagText 
    Extension = 'NULL' 
    packedFormats = [Version,DateCreated,FormatID,FormatName,PUID,FormatVersion,FormatMIMEType,InternalSignatureID,Extension,HasPriorityOverFileFormatID] 
    doFormatsPush(packedFormats) 
if __name__ == "__main__": 
path = "C:\Users\NDHA\Desktop\droid sigs all" 
for (path, dirs, files) in os.walk(path): 
    for file in files: 
    sigfile_filename = str(path)+"\\"+str(file) 
    doParser(sigfile_filename) 
    print sigfile_filename 
db.close()  

All XML kommt von hier: http://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm

Antwort

1

Der Fehler, den Sie bekommen sagt Ihnen genau, was

NameError: global name 'sys' is not defined 

Sie nicht import sys in Ihrer Python-Datei falsch ist.

Wenn Ihr Socket nicht in /tmp/mysql.sock platziert ist, können Sie bei der Verbindung db angeben, wo Sie suchen müssen, wenn Sie versuchen, mit dem Parameter unix_socket eine Verbindung zur Datenbank herzustellen.

Versuchen:

db = MySQLdb.connect (unix_socket = 'path_to_sock', host = "localhost", 
         user = "root", passwd = "", db = "sigfiles") 

Wo Sie 'path_to_sock' mit dem eigentlichen Pfad der mysql Socke ersetzen.

Andere Dinge, die Sie für den Fall überprüfen sollten, die nicht das Problem:

  • Überprüfen Sie, ob der Benutzername/Passwort-Kombination korrekt ist
  • Versuchen Stoppen und Neustarten der mysqld Service
  • überprüfen Sie die Fehlerprotokolldateien für spezifischere Fehler
+0

Ich habe sys importiert, und das Problem besteht weiter, danke fürs Hinschauen! – Jay

+0

Woher weiß ich, was meine definitive Mysql-Socke ist? – Jay

+0

Sie könnten versuchen, die Datei auf Ihrem System zu finden. Angenommen, Sie arbeiten mit einem Linux-basierten System, können Sie dies mit dem Befehl 'find' im Terminal tun. –

0

Dies ist Ihr erster Fehler:

Error 2003: Can't connect to MySQL server on 'localhost' (10055)

Es scheint, dass Sie irgendwann von MySQL trennen. Überprüfen Sie Ihren Code und sehen Sie, ob Sie explizit oder implizit vom Server getrennt werden und ob Ihr MySQL-Server noch Verbindungen hört ... vielleicht töten Sie den Server von außerhalb Ihrer App ... wer weiß?:)

+1

Yupe, kann ich sehen, dass der MySQL-Server stirbt, aber ich bin mir nicht sicher, warum ... wenn es scheitert es für ein paar Minuten aussperrt und löscht die gesamte netwrk-Verbindung (basierend darauf, dass der Browser nicht auf neue Seitenanforderungen reagiert - es gibt kein Timeout aus, es antwortet einfach nicht). Nichts wird in die mysql.log geschrieben – Jay

+0

Hmm, das ist ein ziemlich seltsames Verhalten. Ich denke nicht, dass MySQL das ganze Netzwerk ausknockt. Mit Ihrem Computer läuft noch etwas anderes ... Malware vielleicht? –

Verwandte Themen