Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Mysqldump का उपयोग करके MySQL InnoDB डेटाबेस को डंप और लोड करने का सबसे तेज़ तरीका क्या है?

एक बंद डेटाबेस को तुरंत डंप करना:

mysqldump के साथ "-T" विकल्प का उपयोग करने से निर्दिष्ट निर्देशिका में बहुत सारी .sql और .txt फ़ाइलें प्राप्त होती हैं। INSERT कथनों वाली एकल .sql फ़ाइल की तुलना में बड़ी तालिकाओं को डंप करने के लिए यह ~ 50% तेज़ है (वॉल-क्लॉक में 1/3 कम समय लगता है)।

इसके अतिरिक्त, यदि आप समानांतर में एकाधिक तालिकाओं को लोड कर सकते हैं, और एकाधिक कोर को संतृप्त कर सकते हैं तो पुनर्स्थापित करते समय एक बड़ा लाभ होता है। 8-कोर बॉक्स पर, "-T" द्वारा प्रदान किए गए दक्षता सुधार के शीर्ष पर, डंप को पुनर्स्थापित करने के लिए दीवार-घड़ी के समय में यह 8X अंतर हो सकता है। चूंकि "-T" प्रत्येक तालिका को एक अलग फ़ाइल में संग्रहीत करने का कारण बनता है, उन्हें समानांतर में लोड करना एक विशाल .sql फ़ाइल को विभाजित करने से आसान है।

उपरोक्त रणनीतियों को उनके तार्किक चरम पर ले जाते हुए, कोई एक डेटाबेस को समानांतर में व्यापक रूप से डंप करने के लिए एक स्क्रिप्ट बना सकता है। ठीक यही माकीत एमके-पैरेलल-डंप (देखें http:/ /www.maatkit.org/doc/mk-parallel-dump.html ) और एमके-समानांतर-पुनर्स्थापना उपकरण हैं; पर्ल स्क्रिप्ट जो अंतर्निहित mysqldump प्रोग्राम को एकाधिक कॉल करती हैं। हालाँकि, जब मैंने इनका उपयोग करने की कोशिश की, तो मुझे डुप्लिकेट कुंजी त्रुटियों के बिना पुनर्स्थापना को पूरा करने में परेशानी हुई, जो वैनिला डंप के साथ नहीं हुई थी, इसलिए ध्यान रखें कि आपका माइलेज भिन्न हो सकता है।

LIVE डेटाबेस से डेटा डंप करना (सेवा में रुकावट के कारण):

--single-transaction स्विच किसी लाइव डेटाबेस का डंप लेने के लिए उसे बंद किए बिना या स्लेव डेटाबेस को डंप किए बिना स्लेविंग को रोकने के लिए बहुत उपयोगी है।

अफसोस की बात है, -T --single-transaction के साथ संगत नहीं है, इसलिए आपको केवल एक ही मिलता है।

आमतौर पर, डंप लेना इसे बहाल करने की तुलना में बहुत तेज है। एक उपकरण के लिए अभी भी जगह है जो आने वाली मोनोलिथिक डंप फ़ाइल लेती है और इसे समानांतर में लोड करने के लिए कई टुकड़ों में तोड़ देती है। मेरी जानकारी के लिए, ऐसा कोई उपकरण अभी तक मौजूद नहीं है।

डंप को नेटवर्क पर स्थानांतरित करना आमतौर पर एक जीत है

एक होस्ट रन पर आने वाले डंप को सुनने के लिए:

nc -l 7878 > mysql-dump.sql

फिर अपने DB होस्ट पर रन करें

mysqldump $OPTS | nc myhost.mydomain.com 7878

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

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

अंत में, मैं सामान्य भ्रम के एक बिंदु को दूर करना चाहता हूं।

आप इन झंडों को mysqldump उदाहरणों और ट्यूटोरियल में कितनी बार देखते हैं, इसके बावजूद, वे अनावश्यक हैं क्योंकि वे डिफ़ॉल्ट रूप से चालू होते हैं:

  • --opt
  • --add-drop-table
  • --add-locks
  • --create-options
  • --disable-keys
  • --extended-insert
  • --lock-tables
  • --quick
  • --set-charset .

http://dev.mysql.com/doc/refman/ से 5.1/hi/mysqldump.html :

उन व्यवहारों में से, "--quick" सबसे महत्वपूर्ण में से एक है (पहली पंक्ति को प्रसारित करने से पहले mysqld में सेट किए गए पूरे परिणाम को कैशिंग करना छोड़ देता है), और "mysql" के साथ हो सकता है (जो डिफ़ॉल्ट रूप से चालू नहीं होता है) उन प्रश्नों को नाटकीय रूप से तेज़ करने के लिए जो एक बड़ा परिणाम सेट लौटाते हैं (उदाहरण के लिए एक बड़ी तालिका की सभी पंक्तियों को डंप करना)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अद्यतन विवरण के बाद MySQL ट्रिगर में पुराना मान प्राप्त करें

  2. MySQLi के साथ PHP में कोई डेटाबेस चयनित त्रुटि नहीं है

  3. SQL कथन - इस क्वेरी के व्युत्क्रम का चयन करें

  4. आप LAMP अनुप्रयोगों में SQL इंजेक्शन को कैसे रोकते हैं?

  5. Oracle से mysql में डेटा आयात करें