我编写了一个脚本,将我的数据从MySQL转换为MongoDB。在处理一个包含4,000,000行的表时(当它差不多完成时):
Traceback (most recent call last):
File "C:\Python32\lib\site-packages\pymongo\connection.py", line 822, in _send_message
sock_info.sock.sendall(data)
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "kolibri_to_mongo.py", line 94, in <module>
coll.update(..., upsert=True)
File "C:\Python32\lib\site-packages\pymongo\collection.py", line 411, in update
_check_keys, self.__uuid_subtype), safe)
File "C:\Python32\lib\site-packages\pymongo\connection.py", line 837, in _send_message
raise AutoReconnect(str(e))
pymongo.errors.AutoReconnect: [Errno 10054] An existing connection was forcibly closed by the remote host
Exception mysql.connector.errors.InternalError: InternalError() in <bound method SqlConn.__del__ of SQLConn(?)> ignored
这是PyMongo错误还是SQL错误?我可以检查MySQL或MongoDB端的任何限制(大小或超时)吗?或者只是有人杀了我的查询?
编辑:我注意到现在我无法再通过超时错误连接到MongoDB :( MongoDB中是否有任何需要更改的限制是否更可能是另一个IT /硬件问题?
答案 0 :(得分:1)
这是MySQL服务器上的断开连接 - 我想知道你是否遇到了查询超时或死锁。
您是否有任何慢查询或长查询,或者您的MySQL日志中是否有任何错误?
答案 1 :(得分:1)
该错误来自MySQL,但是,为什么有点未知。该错误似乎表明远程端,在这种情况下,MongoDB关闭了连接。
我建议查看pymongo日志,看看那里是否还有其他信息。
我还会在MySQL端运行tcpdump
以查看MongoDB服务器是否被拒绝连接尝试使用RST,或者SYN是否正在离开MySQL服务器而只是被忽略(对于后者,你应该根据重传定时器看到相应的间距,例如,尝试1 @ 0s,2 @ + 3s,3 + 9s,4 + 21s)。
在MongoDB服务器上,netstat -an | grep LIST
或sudo lsof -c mongod
是否显示MongoDB仍在侦听端口27017(假设您没有更改默认值)?
关于MongoDB连接错误,经典案例是ulimit
设置太低而服务器用完了文件描述符。以下是两个很好的链接供您阅读: