24

私はアーランと記憶喪失の初心者です..

スキーマが既にある mnesia データベースに新しい disk_only_copies ノードを追加するにはどうすればよいですか?

ありがとう

4

1 に答える 1

48

新しいノードを開始します ( b@node) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia。これにより、 という名前の新しい ram_copies ノードが開始されb@nodeます。

元のノード ( a@node) で、erlang プロンプトで実行します。mnesia:change_config(extra_db_nodes, ['b@node']).これにより、元のノードがbmnesia クラスターに接続されます。この時点で、b@nodeはクラスターに参加しましたが、スキーマのコピーしかありません。

b@nodeディスク コピーを格納できる新しいノードを作成するには、スキーマ テーブル タイプをb@nodeからram_copiesに変更する必要がありますdisc_copiesmnesia:change_table_copy_type(schema, 'b@node', disc_copies).任意のノードで実行します。

b@nodeこの時点ではスキーマのコピーしかありません。からすべてのテーブルをコピーしてテーブル タイプa@nodeb@node維持するには、次を実行できます。

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

このコマンドは、ネットワークを介して各テーブルの内容をコピーするため、実行に時間がかかる場合があります。

b@nodeの正確なレプリカになりa@nodeました。そのステートメントを変更できます-テーブルをコピーするためにへの呼び出しでType変数を置き換えますが、それらがディスク上にのみあることを確認してください。disc_only_copiesmnesia:add_table_copy/3

mnesiaのドキュメントには、ここで示した関数の使用方法が説明されています。

于 2009-04-25T12:46:26.467 に答える