私はアーランと記憶喪失の初心者です..
スキーマが既にある mnesia データベースに新しい disk_only_copies ノードを追加するにはどうすればよいですか?
ありがとう
新しいノードを開始します ( 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']).
これにより、元のノードがb
mnesia クラスターに接続されます。この時点で、b@node
はクラスターに参加しましたが、スキーマのコピーしかありません。
b@node
ディスク コピーを格納できる新しいノードを作成するには、スキーマ テーブル タイプをb@node
からram_copies
に変更する必要がありますdisc_copies
。mnesia:change_table_copy_type(schema, 'b@node', disc_copies).
任意のノードで実行します。
b@node
この時点ではスキーマのコピーしかありません。からすべてのテーブルをコピーしてテーブル タイプa@node
をb@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_copies
mnesia:add_table_copy/3
mnesiaのドキュメントには、ここで示した関数の使用方法が説明されています。