2009-01-20 15 views
12

मैंने मशीन 1 पर एक मेनेसिया डेटाबेस/स्कीमा बनाया। नोड को mypl @ machine1 नाम दिया गया था। तब मैंने सभी फाइलों को मशीन 2 में ले जाया, क्योंकि मशीन 1 टूट गई। जब तक कोड "mypl @ machine1" नाम से चल रहा है तब तक सब कुछ ठीक चलता है। जाहिर है यह कुछ हद तक उलझन में है, क्योंकि यह अब मशीन 2 पर चल रहा है।नोडे का नाम बदलने के लिए कैसे एक मैनेशिया डेटाबेस

यदि मैं नोड नाम "mypl @ machine2" के साथ एरलांग शुरू करता हूं तो मैनेशिया डेटाबेस खाली दिखाई देता है।

मैं मशीन 1 से मशीन 2 तक मैनेशिया डेटाबेस में नोड का नाम कैसे बदलूं?

उत्तर

11

मुझे नहीं लगता कि यह एक नोड (किसी भी?) पर ऑनलाइन किया जा सकता है, लेकिन दो नोड्स चलाने और तालिका प्रतियों को जोड़ने के अलावा बैकअप/पुनर्स्थापना के माध्यम से करना संभव है। Mnesia User's guide अनुभाग 6.9.1 में आपको कुछ कोड मिलेगा जो मैनेशिया का उपयोग करता है: traverse_backup स्नेमा तालिका (नीचे दिखाया गया) में नोड नामों को बदलने के लिए एक मैनेशिया बैकअप फ़ाइल में। मॉड्यूल नाम जो आपको शायद उपयोग करना चाहिए mnesia_backup है।

इस कोड के साथ

आप की जरूरत के लिए करेंगे:

%% On [email protected] 
mnesia:backup("/path/to/mnesia.backup"). 
change_node_name(mnesia_backup, [email protected], [email protected], 
       "/path/to/mnesia.backup", "/path/to/new.mnesia.backup"). 
%% On [email protected] 
mnesia:restore("/path/to/new.mnesia.backup", []). 

मुझे यकीन है कि आप [email protected] पर पहले स्कीमा बनाने की जरूरत है, तो नहीं कर रहा हूँ।

उपयोगकर्ता गाइड से परिवर्तन नोड नाम कोड:

change_node_name(Mod, From, To, Source, Target) -> 
    Switch = 
     fun(Node) when Node == From -> To; 
      (Node) when Node == To -> throw({error, already_exists}); 
      (Node) -> Node 
     end, 
    Convert = 
     fun({schema, db_nodes, Nodes}, Acc) -> 
       {[{schema, db_nodes, lists:map(Switch,Nodes)}], Acc}; 
      ({schema, version, Version}, Acc) -> 
       {[{schema, version, Version}], Acc}; 
      ({schema, cookie, Cookie}, Acc) -> 
       {[{schema, cookie, Cookie}], Acc}; 
      ({schema, Tab, CreateList}, Acc) -> 
       Keys = [ram_copies, disc_copies, disc_only_copies], 
       OptSwitch = 
        fun({Key, Val}) -> 
          case lists:member(Key, Keys) of 
           true -> {Key, lists:map(Switch, Val)}; 
           false-> {Key, Val} 
          end 
        end, 
       {[{schema, Tab, lists:map(OptSwitch, CreateList)}], Acc}; 
      (Other, Acc) -> 
       {[Other], Acc} 
     end, 
    mnesia:traverse_backup(Source, Mod, Target, Mod, Convert, switched). 
+0

मैं के बारे में चरणों का पालन किया लेकिन, बहाल करने पर विफल कोई सुझाव? 1. मूल डेटाबेस बैकअप 2. नोड नाम बदलें 3. बाक को किसी अन्य मशीन में कॉपी करें 4. नई बैकअप फ़ाइल को पुनर्स्थापित करें त्रुटि संदेश है: {aborted, {'EXIT', {aborted, {bad_commit, {missing_lock, 'web_server @ anothernode'}}}}} –

1

वर्कअराउंड माइग्रेशन है। बस मैनेशिया क्लस्टर शुरू करें और अपनी सभी टेबल और स्कीमा को अन्य नोड में माइग्रेट करें। मूल से हटाएं और भूल गए।

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