2013-05-10 200 views
3

我正在使用felixge/node-mysql模塊與node.js中的MySQL數據庫進行交互。在一個INSERT請求中向數據庫插入大量數據時遇到了問題。避免node.js中的EPIPE錯誤的最大查詢長度

雖然here有一個如何使用大 INSERT查詢500'000記錄添加到數據庫中的描述,我的腳本失敗,出現以下錯誤與更多的少量數據

{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write', fatal: true }

我認爲這個bug在某種程度上與mysql-node的github Load data infile fails with EPIPE for large files中的#359問題有關,它在創建之後還沒有分配給最近5個月的某個人。

所以這個帽子是保證交付的查詢的實際大小?

+0

這看起來並不像一個bug,你不能假設連接是100%可靠的。記住最後一個insertId,重新連接並繼續。 – 2013-05-10 23:40:04

+0

@AndreySidorov但我已經將數據分成更小的包並且錯誤消失了。 – zavg 2013-05-11 00:02:01

回答

4

我剛纔有這個問題,事實證明,我正在與之交談的Mysql服務器(它在Amazon RDS上)將其max_allowed_packet選項設置得非常低。越來越多的解決了我的問題。

我通過在命令行上運行來自mysql的(非常長的)查詢並搜索我得到的錯誤消息,得到了我需要的線索。然後我得到的指令從這裏增加了對亞馬遜RDS的選項:http://dev.n0ise.net/2012/10/amazon-rds-error-2006-hy000-at-line-xxx-mysql-server-has-gone-away/

參見本SO回答,看看該選項設置爲您的特定數據庫:https://stackoverflow.com/a/5688506/496046

+0

我記得我的問題也是在Amazon RDS上 – zavg 2014-01-21 05:57:33