我有以下问题:
我正在使用 Python 和 MySQLdb 和 SSDictCursor 来迭代一个相当大的数据库(250M 行)。因为我无法将所有内容加载到 RAM 中,所以我使用的是流 API。在 MySQL 服务器上,max_allowed_packet 大小已设置为 512M。
我从不同的计算机(也从服务器机器本身)运行我的脚本,并且在随机数量的已处理行后随机崩溃并出现以下错误:
_mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')
Exception _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') in <bound method SSDictCursor.__del__ of <MySQLdb.cursors.SSDictCursor object at 0x7fa360e1a690>> ignored
我没有使用线程或任何花哨的东西。我完全不知道为什么会发生这种情况。有谁知道如何解决这个问题?
编辑:为您提供一些示例代码。
mysql = MySQLdb.connect("host", "user", "pass", "db")
cursor = mysql.cursor(MySQLdb.cursors.SSDictCursor)
cursor.execute("select stuff from database order by date asc")
for row in cursor:
# just repacking all the information in the cursor row into some dict
cursor.close()
希望那段代码对您有所帮助。在 for 循环中,我只在本地默认字典中进行一些查找。
大约有 80M 条目(或者也可能是 40M 或其他),我的程序由于上述错误而停止。数据必须按顺序传输。另外,由于处理的行数是随机的,我很确定这不是因为数据库中的某些错误行。据我检查,在服务器本身上,只有服务器实例在运行,没有其他程序。