2009-04-24 129 views

回答

38

啓動新節點([email protected]erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia。這會啓動一個名爲[email protected]的新ram_copies節點。

在您的原始節點([email protected])上,在erlang提示符下執行mnesia:change_config(extra_db_nodes, ['[email protected]']).這將導致原始節點將b連接到mnesia羣集。此時,[email protected]已加入羣集,但只有該架構的副本。

要使節點[email protected]能夠存儲光盤副本,我們需要將[email protected]上的架構表類型從ram_copies更改爲disc_copies。在任何節點上運行mnesia:change_table_copy_type(schema, '[email protected]', disc_copies).

[email protected]此時只有一個模式副本。若要從[email protected]複製所有表[email protected]和維護表類型,你可以運行:

[{Tb, mnesia:add_table_copy(Tb, node(), Type)} 
|| {Tb, [{'[email protected]', Type}]} <- [{T, mnesia:table_info(T, where_to_commit)} 
           || T <- mnesia:system_info(tables)]]. 

此命令可能需要一段時間才能執行,因爲它會在網絡上的每個表中的內容複製。

[email protected]現在是[email protected]的確切副本。您可以修改該語句 - 在mnesia:add_table_copy/3的調用中將Type變量替換爲disc_only_copies,以便複製表格但確保它們僅在光盤上。

mnesia documentation解釋瞭如何使用我在這裏展示的功能。

+0

也許你知道這個問題的答案http://stackoverflow.com/questions/3702201/remove-not-exist-already-node-from-mnesia-clusterscheme – vinnitu 2010-09-13 19:27:56

+0

不要以爲你知道這個類似的答案 - 相關的問題? http://stackoverflow.com/questions/13398632/creating-mnesia-disk-copies-of-existing-ram-table – mezamorphic 2012-11-16 09:25:42