बड़ी SQL फ़ाइल phpmyadmin आयात कर रहा है


12

मैं phpmyadmin में इस एसक्यूएल फ़ाइल को आयात करने की कोशिश कर रहा हूं और मुझे यह संदेश मिला है

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

मैं इस आयात को करने के लिए क्या करूं?

जवाबों:


12

मान लें कि आप मेमोरी का आकार आगे नहीं बढ़ा सकते हैं तो कुछ विकल्प हैं।

  • यदि आप कमांड लाइन से परिचित नहीं हैं और आप वास्तव में GUI स्टाइल आयात के साथ रहना चाहते हैं तो आप BigDump ( http://www.ozerov.de/bigdump/ ) का उपयोग कर सकते हैं । मैंने इसे एक बार इस्तेमाल किया लेकिन यह कुछ समय के लिए है। जो मुझे याद है उससे आप bigdump.php (कुछ निर्देशों के साथ) नामक एक फ़ाइल डाउनलोड करेंगे और इसे MySQL DB डंप फ़ाइल के साथ निर्देशिका में अपने वेबसर्वर पर डाल देंगे जो PHPMYADMIN के माध्यम से आयात करने के लिए बहुत बड़ी है। फिर अपने ब्राउज़र का उपयोग करके इसे नेविगेट करें - http://your-website.com/bigdump.php जैसा कुछ ।

  • यदि आप कमांड लाइन से परिचित हैं और लिनक्स आधारित प्रणाली का उपयोग कर रहे हैं तो आप इस तरह कोड का उपयोग कर सकते हैं:

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

डेटाबेस और उपयोगकर्ता (डेटाबेस के लिए विशेषाधिकार के साथ) हालांकि इस आदेश को चलाने से पहले मौजूद होना चाहिए। नोट मैंने उपरोक्त आदेश को किसी अन्य स्रोत से कॉपी किया है। मैं हमेशा अपने डंप करता हूं और इस तरह से पुनर्स्थापित करता हूं: डंप: mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz रेस्टॉर:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • अंत में, और सबसे दर्दनाक रूप से, आप अलग-अलग तालिकाओं या तालिकाओं के समूहों को छोटे पर्याप्त डंप में डंप करना चुन सकते हैं। फिर PHPMYADMIN के माध्यम से एक समय में इन व्यक्तिगत डंपों को पुनर्स्थापित करें।

एफ़टीपी और पुनर्स्थापना निर्देश:

यहाँ FileZilla डाउनलोड करें: http://filezilla-project.org/download.php?type=client

आमतौर पर आप SSH (आप कमांड लाइन लॉगिन) के लिए उसी लॉगिन और पासवर्ड का उपयोग करके अपने सर्वर (विशेष रूप से एक साझा होस्ट) में एफ़टीपी कर सकते हैं। बस FileZilla में अपने सर्वर से कनेक्शन ठीक से सेट करना सुनिश्चित करें।

एक बार कनेक्ट होने के बाद आपका डिफ़ॉल्ट पथ आपके घर का फ़ोल्डर (निक्स मशीनों पर) होने की संभावना है। यदि आप बहुत सारे एफ़टीपी करने की योजना नहीं बना रहे हैं, तो आप वहां जो चाहते हैं, उसे डंप करें। आप इसे हमेशा कमांड लाइन से स्थानांतरित कर सकते हैं।

यदि आप एक MySQL डंप को अपने $ HOME फ़ोल्डर में एफ़टीपी करते हैं, तो एक DB के लिए RESTORE कमांड mydb और एक db डंप फ़ाइल जिसका नाम mydb.sql.gz ($ HOME फ़ोल्डर में) होगा:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

जहाँ आपको स्पष्ट रूप से DB_USER और DB_PASSWORD मूल्यों को बदलने की आवश्यकता होगी, जो उपयोगकर्ता और पासवर्ड आपको DB के लिए सेटअप करते हैं।

याद है:

  • RESTORE कमांड निष्पादित होने से पहले DB को पहले से मौजूद होना चाहिए (लेकिन खाली होना चाहिए)
  • RESTORE कमांड से पहले DB_USER और DB_PASSWORD को DB के लिए सेटअप किया जाना चाहिए (आप PHPMYADMIN - विशेषाधिकार टैब से ऐसा कर सकते हैं)
  • जब आप DBMUSER को PHPMYADMIN से सेट करते हैं, तो यह केवल DB_USER को लोकलहोस्ट से DB को एक्सेस करने की अनुमति देगा (सर्वर DB को होस्ट किया गया है)। मैं मान रहा हूँ कि यह आपकी स्थिति अनुदान के लिए ठीक है। जब आप अधिक उन्नत DUMPs और RESTOREs में प्रवेश करते हैं, तो आप इसे पूरी तरह से कठिन नहीं है, लेकिन एक और मशीन से करना चाहते हैं एक जोड़ी अधिक जानकारी की आवश्यकता होती है और उचित विशेषाधिकार के साथ DB_USER होना चाहिए।

DB को एफ़टीपी करें और फिर से लिखें ... स्टेप बाय स्टेप

  1. अपने डेस्कटॉप पर ज़िप की गई MySQL डंप फ़ाइल का पता लगाएँ (उदाहरण: C: \ Web \ DB \ Dumps \ mydb.sql.zip)
  2. FileZilla डाउनलोड और इंस्टॉल करें
  3. FileZilla में File-> Site Manager में जाएँ और न्यू साइट बटन (GUI के निचले बाएँ वृत्त का चतुर्थ भाग) पर क्लिक करें। होस्ट को एक डोमेन पर सेट करें (उदाहरण: dest.com) जो आपके DESTINATION सर्वर पर रहता है। FTP या SFTP पर प्रोटोकॉल सेट करें (यह आपकी होस्टिंग पर निर्भर करता है, उनसे पूछें)। उपयोगकर्ता और पासवर्ड सेट करें (उदाहरण: उपयोगकर्ता = अनुदान, पासवर्ड = अनुदान का पासवर्ड) - यदि एफ़टीपी प्रोटोकॉल एसएफटीपी है तो वैध एसएसएच लॉगिन क्रेडेंशियल्स का कोई भी सेट काम करना चाहिए।
  4. (FileZilla में) कनेक्ट पर क्लिक करें (सबसे बाईं ओर नीचे बटन)
  5. (FileZilla में) एक बार रिमोट सर्वर से जुड़ा होना चाहिए (आपका DESTINATION सर्वर होना चाहिए) उस निर्देशिका में नेविगेट करने के लिए FileZilla के बाईं ओर का उपयोग करें जहां डंप फ़ाइल आपको चरण 1 में स्थित है। (स्थानीय मशीन के लिए रास्ता लगभग बाईं ओर है, लगभग आधा रास्ता नीचे है और इसे स्थानीय साइट के रूप में लेबल किया गया है: हमारे उदाहरण में स्थानीय साइट के बगल में स्थित टेक्स्टबॉक्स: C: \ Web \ DB \ Dps को पढ़ा जाएगा।)
  6. (FileZilla में) दूरस्थ साइट का पता लगाएँ: स्थानीय साइट के दाईं ओर सीधे लेबल:।
  7. (FileZilla में) कोई तकनीकी कारण नहीं है जो आप DB DUMP को फ़ोल्डर में नहीं रख सकते हैं FileZilla तक खुलता है। यह आपके $ HOME डायरेक्टरी के लिए डिफॉल्ट होगा। यदि आपके पास डीबी डंप को एक विशिष्ट निर्देशिका में रखने का कोई कारण नहीं है - जैसे कि आपके अपने संगठनात्मक उद्देश्यों के लिए - तो अकेले रिमोट साइट पर रास्ता छोड़ दें। उस पथ को लिखें (लिनक्स उदाहरण: / usr / अनुदान)।
  8. (फाइलजिला में) स्थानीय साइट के नीचे दिखाए गए ट्री के नीचे फाइलजिला के बाईं ओर अपनी स्थानीय मशीन पर फ़ाइल का पता लगाएँ: लेबल जो आपको चरण 5 में मिला है। उस फ़ाइल पर डबल क्लिक करें और फ़ाइलज़िला इसे आपकी रिमोट साइट पर एफ़टीपी कर देगा।
  9. अपने DESTINATION सर्वर पर PHPMYADMIN के भीतर, एक नया डेटाबेस बनाएँ (नए डेटाबेस टेक्स्ट बॉक्स में mydb टाइप करें और क्रिएट बटन पर क्लिक करें)।
  10. (PHPMYADMIN में) बाईं ओर स्थित मेनू से mydb चुनें।
  11. (PHPMYADMIN में) विशेषाधिकार टैब (ऊपरी दाएं) पर क्लिक करें। उस पेज पर एक बार Add New User पर क्लिक करें।
  12. (PHPMYADMIN में-> विशेषाधिकार-> नया उपयोगकर्ता जोड़ें) एक उपयोगकर्ता नाम (उदाहरण: mydb_grant) और पासवर्ड प्रदान करें (उदाहरण: mydb_password)। होस्ट ड्रॉपडाउन में स्थानीय चुनें। सुनिश्चित करें कि "डेटाबेस पर सभी विशेषाधिकार प्रदान करें" के बगल में स्थित रेडियो बटन चयनित है। इसके बाद Go (स्क्रीन के दाईं ओर नीचे) पर क्लिक करें।
  13. आपके DESTINATION सर्वर में SSH।
  14. (अपने SSH टर्मिनल में) चरण 7 में लिखी गई डायरेक्टरी को नेविगेट करें - जैसे - cd $HOMEया कमांड का उपयोग करना cd /usr/grant। (Linux मशीनों पर $ HOME एक पर्यावरण चर है जो कुछ / usr / अनुदान के समान होगा।)
  15. (अपने SSH टर्मिनल में) निम्नलिखित कमांड निष्पादित करें: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(-p और पासवर्ड के बीच कोई स्थान नहीं है क्योंकि यह वह तरीका है जिसकी आवश्यकता होनी चाहिए, वह टाइपो नहीं है)।

एक बार जब अंतिम आदेश पूरा हो जाता है तो आपका DB रिस्टोर हो गया है। मैं डीबी उपयोगकर्ता और पासवर्ड का उपयोग करने की अनुशंसा नहीं करता हूं जो मैंने प्रदान किया है बस उन्हें अपने खुद के अधिक सुरक्षित विकल्पों के साथ बदलें।

FTP के बिना DUMP और RESTORE विभिन्न सर्वरों पर

यदि आप एफ़टीपी सामान को छोड़ना चाहते हैं और डीयूएमपी को फिर से तैयार करने में कोई आपत्ति नहीं करते हैं तो आप इसे इस तरह से कर सकते हैं:

  1. DESTINATION सर्वर में लॉग इन करें (जहाँ आप DB को निवास करना चाहते हैं - हम इसे गंतव्य.कॉम कहेंगे)
  2. DESTINATION सर्वर पर उपर्युक्त जैसा कि DB, उपयोगकर्ता और उचित विशेषाधिकार बनाएँ
  3. सुनिश्चित करें कि SOURCE सर्वर पर विशेषाधिकार SOURCE_DB_USER के लिए DB को दूर से एक्सेस करने की अनुमति देता है - या तो dest.com या% (% - सभी से और हर जगह अगर वे सही उपयोगकर्ता नाम और पासवर्ड से पहुंच की अनुमति देते हैं)
  4. DESTINATION सर्वर पर: mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gzजहां source.com स्रोत सर्वर है (जहां DB वर्तमान में रहता है)
  5. तब (DESTINATION सर्वर पर) रन: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

डीबी को एक सर्वर से दूसरे सर्वर पर ले जाने के लिए आपको बस इतना करना चाहिए। कैवियट यह है कि मैंने केवल अपने स्वयं के समर्पित उबंटू (मानक एलएएमपी के साथ) और ड्रीमहॉस्ट के वीपीएस सर्वरों पर ऐसा किया है (जो मुझे विश्वास है कि सेंटो चलाते हैं लेकिन मैं गलत हो सकता है)।


3

आप ऐसा कर सकते हैं:

  • बढ़ना memory_limit
  • बढ़ना post_max_size
  • बढ़ना max_execution_time
  • यह सब करने के बाद अपाचे को पुनः आरंभ करना होगा।
  • या बिग डंप का उपयोग करें

1

क्या आपकी SQL फ़ाइल संपीड़ित है? मैं एक 6MB ज़िप्ड sql फ़ाइल के साथ यह समस्या थी। मैं एक 53MB असम्पीडित sql फ़ाइल में यह विघटित और यह काम किया। डंप फ़ाइल-प्रक्रिया की अनज़िपिंग को सभी मेमोरी को खाना चाहिए।


0

यदि आपके पास mysql के साथ सर्वर तक पहुंच है, तो आप कुछ जगह पर mysql डंप के साथ फाइल रख सकते हैं, mysql कंसोल दर्ज करें:

mysql -u myUser myDatabase

या अगर mysql सर्वर लोकलहोस्ट प्लेस की तुलना में दूसरे पर है और न केवल लोकलहोस्ट से कनेक्शन की अनुमति दें:

mysql -u myUser -h mysql.example.com myDatabase

आपके द्वारा अपने mysql उपयोगकर्ता के लिए पासवर्ड मांगा जाएगा। अब आप mysql कंसोल में। यहां आप टाइप कर सकते हैं

source ~/mydump.sql;

आप देखेंगे कि आपके डंप से कमांड कैसे निष्पादित किए जाएंगे।

इस पद्धति में आप किसी भी php मेमोरी लिमिट की परवाह नहीं करते हैं।


0

यदि आपके डेटाबेस का आकार 128 एमबी से अधिक है, तो अपने डेटाबेस को भागों में विभाजित करें।

SQL डंप स्प्लिटर सॉफ्टवेयर का उपयोग करें

SQL डंप स्प्लिटर एक 430 KB अनुप्रयोग है जो विशाल डेटाबेस को आसानी से छोटे SQL फ़ाइलों में विभाजित करने पर कुल नियंत्रण देता है। SQL डंप फाड़नेवाला के साथ आप कर सकते हैं:

  • प्रत्येक चंक का आकार चुनें
  • टिप्पणियों को छोड़ने का विकल्प (DB के आकार को कम करने के लिए)
  • गतिविधि को स्वचालित करें।

आप गतिविधि को कैसे स्वचालित करते हैं? मैं फाड़नेवाला का उपयोग करता हूं और मुझे पता नहीं है कि यह कैसे काम करता है ... इसने मुझे यह बताए बिना विभाजन को पूरा किया कि किसने इसे फ़ाइल को विभाजित किया और अब इसका उपयोग करने में मदद करने के लिए कोई सहायता या FAQ नहीं है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.