簡體   English   中英

Python mysqldb錯誤關閉連接

[英]Python mysqldb error closing connection

關閉連接時出現問題,如下所示:

   database = 'sed_database'   
   conn = MySQLdb.Connect(host='remote_host', user='default',
                          passwd='pass', db=database)    
   try:
      try:
         cursor = conn.cursor()
         cursor.execute(sql_str)
         results = cursor.fetchall()
      except MySQLdb.Error, e:
         print "MySQL/Server Error using query: %s" % sql_str
         print "Using database: %s" % database
         raise e
   finally:
      if cursor:
         cursor.close()
      if conn:
         conn.close()

這給出:

 Traceback (most recent call last):
  File "trass.py", line 579, in ?
    main(sys.argv)
  File "trass.py", line 555, in main
    old_rows, changes_list = auto_analyse_test(f, args.build, args.quiet, args.debug)
  File "trass.py", line 352, in auto_analyse_test
    last_analysed_build = get_sed_baseline_ref(test_file_name, old_delivery_stream)
  File "trass.py", line 151, in get_sed_baseline_ref
    results = execute_sql_query(sql, delivery_stream)
  File "trass.py", line 197, in execute_sql_query
    passwd='pass', db=database)
  File "C:\Python24\Lib\site-packages\MySQLdb\__init__.py", line 75, in Connect
    return Connection(*args, **kwargs)
  File "C:\Python24\Lib\site-packages\MySQLdb\connections.py", line 164, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.InternalError: (3, "Error writing file 'D:\\MySQL_Datafiles\\Logfiles\\query.
log' (Errcode: 9)")

Python的MySQLDB庫信息如下:

>>> print MySQLdb.get_client_info()
4.1.18
>>> print MySQLdb.__version__
1.2.1_p2
>>> print MySQLdb.__revision__
410

奇怪的是:

  • 我已經檢查了服務器,query.log是否存在並且正在被其他進程寫入。
  • 此代碼經過多次迭代,然后在特定項目上失敗。
  • 確切的查詢可以通過SQLyog正常運行,並產生四個結果。

服務器error.log中顯示“連接中斷...(讀取通訊包時出錯)”

雖然“回溯”似乎顯示與連接創建相關的錯誤,但直到關閉連接(或函數結束,我猜默認情況下會關閉),該錯誤才會發生。 我嘗試在打開和關閉之間放置額外的輸出或暫停。 每當關閉時發生異常。 那么關閉連接時可能導致此錯誤的原因是什么?

這是我到目前為止發現的。

似乎在MySQLdb.Connect(...)粘貼代碼中的第二行MySQLdb.Connect(...)打開連接時觸發了錯誤,而不是在關閉連接時觸發了錯誤。

完整回溯:

  • ...
  • execute_sql_query [op]
  • MySQLdb Connect [操作]
  • MySQLdb超級(...)[op]
  • _mysql.c ConnectionObject_Initialize [較低層的pyhon模塊,用C編寫]
  • libmysql mysql_real_connect或mysql_options [可能是較早的]
  • 失敗,設置了異常

讓我們解碼異常

InternalError:
    (3,
     "Error writing file 'D:\\MySQL_Datafiles\\Logfiles\\query.log'
                         (Errcode: 9)")
  • “ 3”舊的mysql mysys_err.h EE_WRITE 3
  • “ query.log”,這是本地還是遠程日志文件? 似乎是Windows路徑。
  • “”錯誤代碼:9“假定為Windows(上方),即ERROR_INVALID_BLOCK ”存儲控制塊地址無效。“ 相當神秘,但是它會去檢查該文件是否存在,是否可寫以及是否可能經過logrotate或類似操作。 檢查磁盤空間,作為一項很好的措施,請同時進行磁盤檢查。

它似乎是客戶端錯誤。 請檢查您的客戶端my.cnf [client]部分。

給定MySQLdb版本的源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM