首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL - server中途退出脚本

MYSQL - server中途退出脚本
EN

Stack Overflow用户
提问于 2012-04-13 11:30:20
回答 2查看 253关注 0票数 0

我使用mysqldb/python将一些数据推送到mysql数据库中。

该脚本解析一组XML文件以获取数据。

每次我运行它时,MySQL服务器似乎都会在不同的位置退出,并在事务中途出现'#2002 -服务器没有响应(或者本地MySQL服务器的套接字配置不正确)‘错误(所以我假设它不是导致它崩溃的特定数据片段……)

在达到~12或13个文件之前,它一直工作得很好,并给出了这个错误:

代码语言:javascript
复制
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

一旦出现错误,我就无法进入MySQL控制台或通过PHOPmyadmin

如果我离开一段时间,我就可以回到MySQL

MySQL表:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2012-04-13 11:35:12

您得到的错误确切地告诉您出了什么问题

代码语言:javascript
复制
NameError: global name 'sys' is not defined

你没有在你的python文件中使用import sys

至于数据库连接,如果套接字没有放在/tmp/mysql.sock中,则可以使用unix_socket参数指定在尝试连接到数据库时查找它的位置。

尝试:

代码语言:javascript
复制
db = MySQLdb.connect (unix_socket = 'path_to_sock', host = "localhost", 
                      user = "root", passwd = "", db = "sigfiles")

其中,将'path_to_sock‘替换为mysql sock的实际路径。

其他你应该检查的东西,以防这不是问题:

  • 检查以确保用户名/密码组合正确
  • 尝试停止并重新启动mysqld服务
  • 检查错误日志文件以获取更具体的错误
票数 1
EN

Stack Overflow用户

发布于 2012-04-13 11:43:29

这是您的第一个错误:

错误2003:无法连接到'localhost‘上的MySQL服务器(10055)

在某些时候,你似乎与MySQL断开了联系。检查您的代码,看看您是否显式或隐式地断开了与服务器的连接,并检查您的MySQL服务器是否仍在侦听连接...也许你正在从你的应用程序之外杀死服务器...谁知道呢?:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10134868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档