3

完全な mnesia ram_copies のみのデータベースを持っていますが、ノードに disk_copy テーブルを追加する際に問題が発生しています。現時点で私は:

  1. すべての ram_copy テーブル/ノードを作成します

  2. disk_copy-to-be ノードで mnesia を開始します。

  3. を使用して新しいスキーマを作成します(ram_copyテーブルのスキーマを作成しませんでした)mnesia:create_schema([Node])
  4. を使用して、disk_copyにしたいテーブルをコピーしますmnesia:add_table_copy(table, Node, disk_copy)
  5. 次に、テーブルが作成されるのを待ちます

すべてが計画どおりに進んでいるように見えます (実行時エラーはありません) が、pwd() に行くと。ディレクトリとチェック、作成したばかりのテーブルを反映したファイルはありません。またmnesia:info()、ノードを呼び出すと、disk_copy テーブルはなく、ram_copy スキーマのみです。

4

1 に答える 1

4

「running db nodes」フィールドに、開始した両方のノードがリストされていることを確認できますか? 2 番目のノードを mnesia クラスターに追加していない可能性があります。

したがって、2 番目のノードが BNode と呼ばれる場合、最初のノードでこれらのコマンドを次の順序で実行します。

1) mnesia:change_config(extra_db_nodes, [BNode]).  
2) mnesia:add_table_copy(table, BNode, disc_copies).

2 番目: disk_copy-to-be ノードで mnesia を起動する前に (ステップ 2)、スキーマを作成する必要があると思います (ステップ 3)。

これは、必要なスキーマを作成するために私が行ったことです
。NodeA と NodeB の 2 つのノードがあるとします。
これを開始する前に、Mnesia dir が存在しないことを確認してください。

%% From NodeA, setup the A node
erl -sname a -setcookie cookie
mnesia:start().
mnesia:create_table(mytable, [{attributes, [field1, field2]}]).

%% From NodeB, setup the B node
erl -sname b -setcookie cookie
net_adm:ping(NodeA).
mnesia:create_schema([node()]).
mnesia:start().

%% From NodeA, Add the NodeB to the mnesia cluster
[BNode | _] = nodes().
mnesia:change_config(extra_db_nodes, [BNode]).

%% From NodeA, add NodeB as a disc copy
mnesia:add_table_copy(mytable, BNode, disc_copies).
于 2012-11-15T14:19:06.113 に答える