चेतावनी: पृष्ठभूमि जानकारी काफी लंबी है। यदि आपको लगता है कि आपको पृष्ठभूमि की जानकारी से पहले प्रश्न की आवश्यकता है तो नीचे जाएं। उस समय की सराहना करें जो यह करने वाला है!मैनेशिया डेटाबेस बैकअप/पुनर्स्थापित करने का सही तरीका क्या है?
मैं पूरे वेब पर हूं (Google पढ़ें) और मुझे कोई अच्छा जवाब नहीं मिला है। हां, erlang.org साइट पर मैनेशिया दस्तावेज के बहुत सारे लिंक और संदर्भ हैं लेकिन यहां तक कि वे लिंक संस्करण-इटिस से पीड़ित हैं।
तो सबसे सरल मामले में जहां नोड() जो आप वर्तमान में कनेक्ट हैं, तालिका सेट के मालिक के समान ही है, तो बैकअप/पुनर्स्थापना काम करने जा रही है। उदाहरण के लिए:
$ erl -sname mydatabase
> mnesia:start().
> mnesia:create_schema(...).
> mnesia:create_table(...).
> mnesia:backup("/tmp/backup.bup").
> mnesia:restore("/tmp/backup.bup", [{default_op, recreate_tables}]).
अरे यह बहुत अच्छा काम करता है!
$ erl -sname mydbadmin
> rpc:call([email protected], mnesia, backup, ["/tmp/backup.bup"]).
> rpc:call([email protected], mnesia, restore, ["/tmp/backup.bup", [{default_op, recreate_tables}]]).
बेशक यह आसान था:
हालांकि, अगर डेटाबेस वास्तव में एक दूरस्थ नोड() या एक दूरस्थ नोड() एक दूरस्थ संभोग पर पर चल रहा है तो आप बैकअप इस तरह से शुरू करने के लिए है भी। अब यहाँ मुश्किल चीजें हैं ....
- मान लें कि आप दैनिक बैकअप ले रहे हैं। और आप मैनेशिया डेटाबेस सर्वर मर जाते हैं और आपको हार्डवेयर को प्रतिस्थापित करने के लिए मजबूर किया जाता है। यदि आप डीबी को पुनर्स्थापित करना चाहते हैं तो आपको उस नए नाम को उसी नाम से नामित करने की आवश्यकता है जिसे पहले किया गया था और आपको नोड्स को भी नाम देने की आवश्यकता है।
- यदि आप हार्डवेयर और/या नोड() का नाम बदलना चाहते हैं ... या आप एक अलग मशीन पर पुनर्स्थापित करना चाहते हैं, तो आपको नोड_चेंज प्रक्रिया के माध्यम से जाना होगा। (here और मैनेशिया डॉक्स में वर्णित)
लेकिन यहां चीजें जटिल होती हैं। मेरे परिचितों के दौरान, जो एरलांग और मैनेशिया विशेषज्ञ हैं, सुझाव देते हैं कि मैनेशिया की प्रतिकृति गंभीर रूप से त्रुटिपूर्ण है और आपको इसका उपयोग नहीं करना चाहिए (वर्तमान में कोई विकल्प नहीं है जिसे मैं जानता हूं और आप बेहतर संस्करण को लागू करने के अवसर क्या हैं; संभावना)
तो आपके पास दो नोड्स() हैं जो रैम और डिस्क आधारित तालिकाओं की प्रतिलिपि बना रहे हैं। आप डिफ़ॉल्ट बैकअप मोड का उपयोग कर मानक बैकअप के साथ नियमित रूप से डेटाबेस का बैक अप लेने की नीति बनाए रख रहे हैं। और एक दिन एक प्रबंधक आपको बैकअप को सत्यापित करने के लिए कहता है। केवल जब आप डेटाबेस बहाल करने का प्रयास आपको मिलेगा:
{atomic,[]}
और प्रलेखन के अनुसार इसका मतलब है कोई त्रुटि नहीं थे कि ... और अभी तक कोई टेबल बहाल किया गया।
परिवर्तन_नोड प्रक्रिया को चलाने के लिए नहीं चाहते हैं, आपको याद है कि नोड() और होस्टनाम का मिलान होना चाहिए ताकि आप होस्टनाम और -नाम नाम को उस मशीन से मेल खाने के लिए बदल सकें जहां डेटा का बैक अप लिया गया था। इस बार हालांकि आप एक अजीब त्रुटि मिलती है:
{aborted,{'EXIT',{aborted,{bad_commit,{missing_lock,[email protected]}}}}}
फिर भी change_node प्रक्रिया मैं जल्दी से अपने सर्वर को बहाल इतना है कि मैं इसी तरह के दो मशीन है क्लोन को चलाने के लिए नहीं चाहते। मैं उत्पादन सर्वर से मेल खाने के लिए उचित रूप से नाम देता हूं। और मैं बहाली की प्रक्रिया शुरू करता हूँ। यूरेका! अब मेरे पास पुनर्स्थापित सर्वर पर वास्तविक कामकाजी डेटा है।
मैं यह कहना चाहूंगा कि यह सड़क का अंत था ... लेकिन मैंने अभी तक एक प्रश्न नहीं पूछा है और यह बात है .... तो यह यहाँ है?
प्रश्न: अगर मैं एक बैकअप जो दोहराया mnesia नोड्स के एक समूह से लिया गया है पुनर्स्थापित करना चाहते हैं, मैं कैसे फ़ाइल (change_node प्रक्रिया के समान) संपादित कर सकता है, ताकि अन्य नोड या तो नजरअंदाज कर दिया या से निकाल दिए जाते बैकअप?
थोड़ा अलग तरीके से पूछा गया: मैं एक नोड() पर एक प्रतिकृति-बहु-नोड() मैनेशिया डेटाबेस को पुनर्स्थापित कैसे करूं?
http://stackoverflow.com/questions/463400/how-to-rename-the-node-running-a-mnesia-डेटाबेस को भी देखना चाहिए। –