我有以下问题:
我使用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循环中,我只在本地defaultdict中进行一些查找。
大约有80M条目(或者也许是40M或其他),我的程序因上述错误而停止。必须按顺序传输数据。此外,由于处理行的随机数,我很确定这不是因为数据库中的某些错误行。在服务器本身,只有我运行的服务器实例,没有其他程序。