2011-01-25 13 views
8

cmd के साथ मैं डेटाबेस डंप आयात करने के लिए mysql -uroot database < filename.sql चलाता हूं (फ़ाइल से पढ़ता हूं और MySQL को पास करता हूं)। हालांकि, < शक्तिशक्ति में "आरक्षित" है।स्मृति में फ़ाइल लोड किए बिना पावरहेल पाइप फ़ाइल सामग्री

इसके बजाय, शक्तियों में मैं get-content filename.sql | mysql -uroot database का उपयोग करता हूं। चेतावनी यह है कि पावरहेल filename.sqlपूरी तरह से मेमोरी में माइस्क्लुएल के साथ पास करने से पहले पढ़ता है, और बड़े डेटाबेस डंप के साथ यह बस स्मृति से बाहर चला जाता है।

जाहिर है, मैं इसे cmd के माध्यम से निष्पादित कर सकता हूं लेकिन मेरे पास इस तरह के विभिन्न कार्यों को स्वचालित करने वाली कुछ शक्तियां स्क्रिप्ट हैं और मैं उन्हें बैच में सभी को फिर से लिखना नहीं चाहता हूं। इस विशेष मामले में, filename.sql एक चर है जो स्वचालन को बंद करने पर पीएस पैरामीटर के माध्यम से निर्दिष्ट किया गया है।

तो मैं इस स्मृति सीमा के आसपास कैसे हो सकता हूं? फ़ाइल सामग्री को MySQL में सीधे पाइप करने का कोई और तरीका है?

उत्तर

12

आप चीजों को जटिल पाने के लिए हो सकता है आप कि जटिल कार्य करता है एक सी # कंसोल आवेदन लिखना चाहिए शुरू करते हैं

mysql -uroot -pYourPassword -e "source C:\temp\filename.SQL" 

या

mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL" 

कोशिश कर सकते हैं।

+0

ऊपर और फिर से चल रहा है। चीयर्स! – cbednarski

2

सुनिश्चित नहीं हैं कि अगर यह आपके आवेदन या नहीं करने के लिए काम करेंगे (यह बजाय एक ही बार में एक समय 1000 अभिलेखों की मात्रा में फ़ाइल पर कार्रवाई करनी चाहिए,):

मिल-सामग्री filename.sql -readcount 1000 |% {$ _ | mysql -uroot डेटाबेस}

+1

स्लिम तकनीक, लेकिन लाइनों की संख्या पर मनमाने ढंग से विभाजित एसक्यूएल वाक्यविन्यास को उलझाना प्रतीत होता है। यह निश्चित रूप से अन्य स्थानों में आसान होगा, धन्यवाद, धन्यवाद। :) – cbednarski

0

मैं कहूंगा कि बड़ी फ़ाइलों के लिए cmdlets से दूर रहें। मैं कुछ ऐसी फाइलों के साथ ऐसा कर रहा हूं जो 30+ मिलियन लाइन लंबी हैं और नीचे दिए गए कोड का उपयोग करके कोई समस्या नहीं है। यह स्पीड-वार और मेमोरी खपत दोनों के साथ बेहद अच्छी तरह से प्रदर्शन करता है।

$reader = [IO.File]::OpenText($filetoread) 
while ($reader.Peek() -ge 0) { 
    $line = $reader.ReadLine() 

    #do your thing here 

} 
$reader.Close() 
0

आसान तरीका और allready परीक्षण किया क्या करना है:

Get-Content .\buTable.sql | mysql -uuser -ppassword destDatabase 

मुझे आशा है कि यह मदद मिलेगी

संबंधित मुद्दे