当尝试使用 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
答案2
我实际上已经做了一个博客文章关于这个问题。您需要增加 max_allowed_packet 的大小:
# 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