python mysqldb-mysql 服务器消失-无法重新连接

python mysqldb-mysql 服务器消失-无法重新连接

当尝试使用 python 和 mysqldb 将一堆数据导入 mysql 表时,我遇到以下错误“2006 - mySQL Server 已消失”,然后我无法在脚本中再次重新连接。

我最初在事务之间重新使用连接对象(由 conn.commit() 划定),然后当我第一次遇到此异常时,如果我通过调用 MySQLdb.connect() 创建一个新连接,则这个新连接也会因相同的异常而失败。

这个错误不会立即发生,我可以将大量数据泵入数据库,但是在我插入几千条记录后就会如实地发生,所以大致一旦数据库提交了一定的事务量,它就会像这样失败。

如果我重新运行脚本而不重新启动数据库服务器,那么它会从中断的地方恢复,输入一些数据,然后再次失败。

在建议更改超时时间之前,有人知道为什么我在初始失败后无法建立新的连接吗? - 即使我尝试了几次,每次之间都等待几秒钟。

(顺便说一句,我正在运行 Windows 7、mysql 服务器 5.1.48、mysqldb 1.2.3.gamma.1、python 2.6)

答案1

这可能与您保持与数据库的持久连接并且可能超时有关。

看这里:问题1第二季度

另外,您能提供一些您尝试过但实际上不起作用的代码吗?

虽然我们这样做了,但数据库连接可能很昂贵,但也许你可以每批获取一个新的连接(前提是你可以把数据分成几批)

答案2

我实际上已经做了一个博客文章关于这个问题。您需要增加 max_allowed_pa​​cket 的大小:

# The MySQL server
[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 64M   <======
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

相关内容