इष्टतम mysqldump सेटिंग्स क्या हैं? [बन्द है]


14

कुछ खोज के बाद मैं निम्नलिखित सेटिंग्स के साथ समाप्त हुआ:

    mysqldump\
    --host=localhost\
    --port=3306\
    --databases ****\
    --user=****\
    --password=****\
    --default-character-set=utf8\
    --add-drop-database\
    --add-drop-table\
    --add-locks\
    --complete-insert\
    --extended-insert\
    --lock-all-tables\
    --create-options\
    --disable-keys\
    --quick\
    --order-by-primary\
    --set-charset\
    --tz-utc\
    > dump/test.sql

अब तक बहुत अच्छा है, लेकिन मेरे पास मापदंडों के साथ-साथ निष्पादन के बारे में कुछ प्रश्न हैं।

अपनी पहली चिंता के बारे में, मैं बस यह सुनिश्चित करना चाहता हूं कि इन सभी की आवश्यकता है और जब एक साथ उपयोग किया जाता है तो कोई संघर्ष नहीं होता है। अंततः, मैं लाखों रिकॉर्ड्स के साथ एक बहुत ही मजबूत और सुसंगत डंप फ़ाइल बनाना चाहूंगा, जो डेटा, टेबल और डेटाबेस बनाता है। अच्छी बात यह है कि डेटाबेस को कुछ समय के लिए उपलब्ध नहीं कराना मेरे लिए कोई समस्या नहीं है। मेरा एकमात्र लक्ष्य एक मजबूत और सुसंगत डंप फ़ाइल बनाना है।

अपने दूसरे कॉन्सर्ट के बारे में, मैं जानना चाहूंगा कि कैसे सूचित किया जाए, जब कमांड गलत हो जाए और यदि ऐसा हो तो अपवाद छोड़ दें।

कोई विचार?

संपादित करें

यह मेरा अपडेटेड mysqldump कमांड है जो रोलांडोमीक्यूडीबीबीए के फीडबैक पर आधारित है।

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql

प्रत्येक तर्क और इसके लाभों को पढ़ें और चुनें कि आपको कौन सा सूट करेगा। असफलताओं को भड़काने के लिए स्क्रिप्टिंग को भी जान लें।
मन्नोज

ठंडा। लेकिन यह वास्तव में मेरे सवाल का जवाब नहीं है। उदाहरण के लिए, आप उनमें से किसका हमेशा उपयोग करते हैं?
user706838

मेरी अज्ञानता को क्षमा करें, यह प्रश्न किसी पुस्तक या वेबसाइट की सिफारिश करने के बारे में नहीं है। इसलिए मुझे लगता है कि यह राय आधारित प्रकार का प्रश्न नहीं होना चाहिए। यह कहा गया है कि कुछ उत्तर निश्चित रूप से विशेषज्ञता के आधार पर अधिक गुणवत्ता वाले होंगे और परीक्षणों द्वारा समर्थित होंगे। मेरी राय में, प्रश्न पूरी तरह से एक अच्छी तरह से परिभाषित उद्देश्य के साथ कहा गया है।
user10089632

जवाबों:


30

आप यह चौंकाने वाला लगता है जा रहे हैं, लेकिन आप केवल एक प्रमुख विकल्प की जरूरत है: --opt

क्या है - अपनाने ?

यह विकल्प डिफ़ॉल्ट रूप से सक्षम, के संयोजन के लिए आशुलिपि है --add-ड्रॉप-तालिका --add-ताले --create-विकल्प --disable कुंजी --extended-डालने --lock-टेबल --quick - सेट-चारसेट । यह एक तेज़ डंप ऑपरेशन देता है और एक डंप फ़ाइल बनाता है जिसे जल्दी से MySQL सर्वर में पुनः लोड किया जा सकता है।

क्योंकि - -पॉप विकल्प को डिफ़ॉल्ट रूप से सक्षम किया गया है , आप केवल इसका संकेत निर्दिष्ट करते हैं, --स्काइप-ऑप्ट कई डिफ़ॉल्ट सेटिंग्स को बंद करने के लिए। चुनिंदा विकल्पों को सक्षम करने या अक्षम करने के बारे में जानकारी के लिए mysqldump विकल्प समूहों की चर्चा को देखें - अपनाने से प्रभावित।

चूंकि --ॉप्ट पहले से ही सक्षम है, इसलिए आपको --opt को निर्दिष्ट करने की कोई आवश्यकता नहीं है । इसके बावजूद, आपको कुछ आवश्यक विकल्पों की आवश्यकता हो सकती है जो शामिल नहीं हैं।

इस क्वेरी को अपने डेटाबेस पर चलाएँ

SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;

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

यदि आपके पास एक या अधिक MyISAM टेबल हैं, तो आपको --lock-all-tables को निर्दिष्ट करना होगा । यह स्वचालित रूप से --lock-tables को निष्क्रिय कर देगा , --single-transaction को निष्क्रिय कर देगा , सभी डेटाबेस में सभी तालिकाओं को लॉक कर देगा, फिर डंप बनाएँ। InnoDB तालिकाओं के लिए लेखन अभी भी हो सकता है, लेकिन वे केवल तब तक कतारबद्ध होंगे जब तक कि ताले जारी नहीं हो जाते। किसी भी MyISAM तालिकाओं को लिखने का प्रयास करने वाला कोई भी DB कनेक्शन वास्तव में तब तक निलंबित रहेगा जब तक कि सभी ताले जारी नहीं हो जाते।

यह क्वेरी चलाएँ: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;

यदि Number_Of_Stored_Proceduresशून्य से अधिक है, तो --routines का उपयोग करें

यह क्वेरी चलाएँ: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;

यदि Number_Of_Triggersशून्य से अधिक है, तो --triggers का उपयोग करें

गुफा : कृपया सभी डेटाबेस को डंप करने के लिए उपयोग न करें -ऑर्डर-बाय-प्राइमरी , क्योंकि यह संभावित रूप से पुनः लोड होने पर बीपीआरई इंडेक्स बना सकता है। -ऑर्डर-बाय-प्राइमरी का उपयोग केवल तब किया जाना चाहिए जब किसी व्यक्ति की तालिका को डंप किया जाए जिसे आप जानते हैं कि एक पूर्णांक प्राथमिक कुंजी है और आपके आवेदन से बहुत सारे रेंज स्कैन होंगे।

यदि आपको अधिक रचनात्मक प्रकार के mysqldump बैकअप की आवश्यकता है, तो मेरी पुरानी पोस्ट देखें मैं किसी बड़े डेटाबेस के mysqldump को कैसे अनुकूलित कर सकता हूं?

कृपया mysqldump के सभी विकल्प पढ़ें

अद्यतन 2014-12-29 09:44 ईएसटी

मैंने अपने mysqldump कमांड को अपडेट किया है (कृपया मेरा संपादन देखें)। मेरे पास एक अंतिम प्रश्न है। क्या आपको लगता है कि निम्नलिखित सभी तर्कों का उपयोग करना उचित होगा? --add-drop-डेटाबेस \ --add-drop-table \

आपकी टिप्पणी और आपके नवीनतम संपादन को देखते हुए, आइए इनमें से प्रत्येक विकल्प को देखें और देखें कि क्या आपको उनमें से किसी की आवश्यकता है

  • - अपनाने : मैंने पहले ही कहा था कि आपको इसे निर्दिष्ट करने की कोई आवश्यकता नहीं है क्योंकि यह डिफ़ॉल्ट रूप से सक्षम है।
  • -delayed-Insert : मैं adamantly एक सभी InnoDB डेटाबेस के साथ इस से दूर रहते हैं। वास्तव में, मैं दृढ़ता से इस PERIOD से दूर रहता हूँ !!! । 1) चूंकि INSERT के लिए यह संभव है कि डेटा खो सकता है, 2) यह MySQL प्रतिकृति दासों के लिए INSERT में परिवर्तित हो जाता है, 3) एक खुला बग रिपोर्ट है जिसके बारे में MySQL 5.6 में वापस ट्रिगर के साथ उपयोग किया जाता है और इसे बग नहीं माना जाता है , 4 ) यह MySQL 5.6 में चित्रित किया गया है , और 5) Morgan Tocker (अच्छी तरह से ज्ञात MySQL गुरु) ने 2012 में वापस अपने पदावनत को छोड़ दिया , आपको इस विकल्प को कभी भी मौजूद नहीं भूलना चाहिए। कभी मत करो, कभी (अनंत) इसका इस्तेमाल करो !!!
  • - अपूर्ण-सम्मिलित करें : इसके INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...स्थान पर उपयोग किया जाएगा INSERT INTO tblname VALUES ...। यदि तालिका की परिभाषा में कई स्तंभ हैं और तालिका में कई पंक्तियाँ हैं तो यह mysqldump को फूंक सकता है। इसका उपयोग न करें।
  • --add-drop-table : चूंकि --opt इसे आपके लिए सक्षम बनाता है, आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है।
  • --add-drop-database : यदि आप --add-drop-database को छोड़ते हैं , तो यह बस बनाता है DROP TABLE IF EXISTS(जिसे --add-drop-table द्वारा जोड़ा गया था ) तेजी से आगे बढ़ता है । इसका उपयोग नहीं करने से बस DROP TABLE IF EXISTSप्रत्येक तालिका के लिए होने देता है। इस प्रकार, --add-drop-database का उपयोग करना व्यक्तिगत पसंद का मामला है।
  • --tz-utc : यदि आप उसी सर्वर से डेटा को पुनर्स्थापित करने की योजना बनाते हैं जिससे आप बैकअप लेते हैं, तो आपको --tz-utc की आवश्यकता नहीं है । यदि आप डेटा को किसी भिन्न समय क्षेत्र में किसी अन्य डेटा केंद्र में पुनर्स्थापित करते हैं और ...
    • यदि आप उसी टाइमज़ोन को आप से बैकअप रखना चाहते हैं, तो आपको --tz-utc की आवश्यकता नहीं है ।
    • यदि आप किसी नए डेटा सेंटर के समय क्षेत्र का उपयोग करने के लिए डेटा चाहते हैं, तो आपको --tz-utc चाहिए
    • उदाहरण: कहते हैं कि आप न्यूयॉर्क में एक डेटाबेस का बैकअप लेते हैं। वह ईएसटी है। यदि आपके पास सिएटल में एक और डेटा सेंटर है, तो वह पीएसटी होगा। यदि आप चाहते हैं कि न्यूयॉर्क बैकअप सिएटल में बहाल हो और आप डेटाबेस में टाइमस्टैम्प अभी भी न्यूयॉर्क का प्रतिनिधित्व करना चाहते हैं, तो आप --tz-utc का उपयोग नहीं करना चाहते हैं ।
  • --default-चरित्र-सेट
    • यदि आप उसी सर्वर पर डंप को पुनर्स्थापित कर रहे हैं, तो आपको जरूरत नहीं है --default-character-set
    • यदि आपके पास सभी InnoDB डेटाबेस है, तो आपको जरूरत नहीं है --default-character-set
    • चूंकि utf8 डिफ़ॉल्ट मान है, इसलिए आपको --default-character-set की आवश्यकता नहीं है

अपने नवीनतम संपादन को समायोजित करना, यह वही है जो आपको विशेष रूप से चाहिए

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql

फिर से, मैं कहता हूं कि कृपया mysqldump के सभी विकल्पों को पढ़ें


के बारे में --add-drop-database: यह भी सुनिश्चित नहीं करता है कि आपके डेटाबेस में कोई अन्य रैंडम टेबल नहीं हैं जो आपके डंप में नहीं हैं? यदि किसी ने मैन्युअल रूप से आपके डेटाबेस में एक यादृच्छिक परीक्षण तालिका बनाई है, तो यह इस विकल्प के बिना डंप से पुनः लोड होने के बाद भी मौजूद रहेगा। तो, यह इस बात पर निर्भर करता है कि आप ऐसा चाहते हैं या नहीं। सही?
jschultz410

किस बारे में --add-drop-trigger?
lonix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.