2012-02-18 13 views
6

मैं एक php स्क्रिप्ट जो एक्सएमएल फाइल को पार्स करता है और एक बड़े एसक्यूएल फ़ाइल है कि इस तरह दिखता है बनाता है में बड़े एसक्यूएल फ़ाइलें आयात करने के लिए:mysql तालिका

INSERT IGNORE INTO table(field1,field2,field3...) 
VALUES ("value1","value2",int1...), 
("value1","value2",int1)...etc 

इस फ़ाइल में 20GB से अधिक होने का कहते हैं (मैं एक 2.5 जीबी फ़ाइल पर परीक्षण किया है लेकिन यह भी विफल रहता है)।

मैं जैसे आदेशों की कोशिश की है:

mysql -u जड़ -p TABLE_NAME < /var/www/bigfile.sql

इस छोटी फ़ाइलों पर काम करता है, 50MB के आसपास का कहना है। लेकिन यह एक बड़ी फाइल के साथ काम नहीं करता है।

मैंने कोशिश की:

mysql> source /var/www/bigfile.sql 

मैं भी mysqlimport कोशिश की, लेकिन यह है कि ठीक से मेरी फ़ाइल पर कार्रवाई नहीं होंगे।

मैं एक त्रुटि है कि कहते हैं

ERROR 2006 (HY000): MySQL server has gone away 

लगभग होता जा रहे हैं। निष्पादन शुरू करने के 30 सेकंड बाद।

मैंने 4 जीबी तक allow_max_packet सेट किया है, लेकिन इसे दिखाने के साथ इसे सत्यापित करते समय यह केवल 1 जीबी दिखाता है।

क्या कोई और 10 घंटे बर्बाद किए बिना ऐसा करने का कोई तरीका है?

उत्तर

2

फ़ाइल को एकाधिक INSERT क्वेरी में विभाजित करने का प्रयास करें।

+0

मुझे ऐसा क्यों नहीं लगता था ... – nick

+0

ने लगभग 5 मिनट में 2.5 जीबी आयात किया। सलाह के लिये धन्यवाद! – nick

+0

my.cnf में 'max_allowed_packet = 16M' सेटिंग को भी देखें - इसे 16M की तरह बहुत बड़ी सेटिंग में सेट करना बड़े एकल प्रविष्टियों की अनुमति देगा –