2012-04-13 21 views
0

mysqldb/pythonを使用してmysql dbにデータをプッシュしています。MYSQL - サーバがスクリプトの途中で終了する

スクリプトは、データのXMLファイルを解析します。

MySQLサーバーが終了しているようで、トランザクションの途中でエラーが発生しました - 実行するたびに別の場所でサーバーが応答しません(またはローカルMySQLサーバーのソケットが正しく構成されていません)

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 
:それは

それはそれは〜12または13ファイルに達すると、それは私にこのエラーを与えるまで完璧に動作します(私はそれが倒れ作ってそのデータのない特定の部分を...と仮定しています)

エラーが発生すると、MySQLコンソールまたはPHOPmyadminを使用できなくなる

私はしばらく場合ままにしておくと、私は、MySQLに戻って取得することができます

MySQLテーブル:

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) 

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コード

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

すべてのXMLここから来る:http://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm

答えて

1

は、あなたが得るエラーが間違っている正確に何を説明します

NameError: global name 'sys' is not defined 

あなたはPythonのファイルにないimport sysを行います。

db接続の場合、ソケットが/tmp/mysql.sockに配置されていない場合、unix_socketパラメータを使用してdbに接続しようとすると、そのソケットを探す場所を指定できます。

試してください:あなたはMySQLの靴下への実際のパスで 'path_to_sock' を置換

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

あなたが問題ではない場合に確認すべき他のもの:ユーザー名/パスワードの組み合わせが

  • 正しいことを確認し停止してmysqldサービス
  • 再起動してみてくださいにする

    • チェックより具体的なエラー
  • +0

    sysをインポートしましたが、問題は解決しません。 – Jay

    +0

    私の決定的なmysqlソックスは何ですか? – Jay

    +0

    システム上でファイルを検索しようとすることができます。 Linuxベースのシステムで作業していると仮定すると、これは端末の 'find'コマンドを使って行うことができます。 –

    0

    のためのエラー・ログ・ファイルを確認してください。これはあなたの最初のエラーです:

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

    ある時点でMySQLから切り離されているようです。あなたのコードをチェックして、明示的または暗黙的にサーバーからの接続が切断されているかどうかを確認し、MySQLサーバーが接続をリッスンしているかどうかを確認してください...おそらくあなたはアプリ外からサーバーを殺しています...:)

    +1

    Yupe、私はmysqlサーバが死んでいるのを見ることができますが、なぜそれは失敗するのでしょうか...数分(ブラウザが新しいページリクエストに応答しないため、タイムアウトしない、単に応答しない)、ネットワーク接続全体をノックアウトします。何もmysql.logに書き込まれていません – Jay

    +0

    うーん、それは非常に奇妙な動作です。私は、MySQLがネットワーク全体をノックアウトしているとは思わない。あなたのコンピュータで何か他のことが起こっています...おそらくマルウェアですか? –

    関連する問題