Python mysqldb错误关闭连接

Jam*_*ury 8 python mysql python-2.4 mysql-python

关闭连接时遇到问题如下:

   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()
Run Code Online (Sandbox Code Playgroud)

这给出了:

 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)")
Run Code Online (Sandbox Code Playgroud)

Python的MySQLDB库信息如下:

>>> print MySQLdb.get_client_info()
4.1.18
>>> print MySQLdb.__version__
1.2.1_p2
>>> print MySQLdb.__revision__
410
Run Code Online (Sandbox Code Playgroud)

奇怪的是:

  • 我检查了服务器并且query.log存在并且正被其他进程写入.
  • 此代码通过多次迭代,然后在特定项目上失败.
  • 确切的查询通过SQLyog运行良好,产生四个结果.

服务器error.log显示"Aborted connection ...(读取通信数据包时出错)"

虽然Traceback似乎显示与连接创建相关的错误,但是在连接关闭之前它不会发生(或者函数结束,我猜这默认会关闭它).我已经尝试在打开和关闭之间添加额外的输出或暂停.每次关闭时发生异常.那么什么可能导致关闭连接时出现此错误?

Dim*_*nek 3

这是我到目前为止发现的。

看来,在MySQLdb.Connect(...)粘贴代码的第二行打开连接时会触发错误,而不是在关闭连接时触发错误。

完整回溯:

  • ...
  • 执行_sql_查询 [操作]
  • MySQLdb 连接 [操作]
  • MySQLdb super(...) [操作]
  • _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)")
Run Code Online (Sandbox Code Playgroud)
  • “3”较旧的 mysql mysys_err.h EE_WRITE3
  • “query.log”,这是本地日志文件还是远程日志文件?似乎是一个Windows路径。
  • “Errorcode: 9”假设是windows(上图),即ERROR_INVALID_BLOCK“存储控制块地址无效”。相当神秘,但它会检查该文件是否存在,是否可写,以及是否可能受到 logrotate 或类似的影响。检查磁盘空间,为了更好的措施,也进行磁盘检查。

这似乎是客户端错误。请检查您的客户端my.cnf部分[client]

给定 MySQLdb 版本的源代码