创建现有ram表的mnesia disk_copies

时间:2012-11-15 13:38:48

标签: erlang mnesia

我有一个完整的mnesia ram_copies-only数据库但我在向节点添加disk_copy表时遇到问题。目前我这样做:

  1. 创建我的所有ram_copy表/节点

  2. 在disk_copy-to-be节点上启动mnesia。

  3. 使用mnesia:create_schema([Node])
  4. 创建新架构(我没有为ram_copy表创建架构)
  5. 使用mnesia:add_table_copy(table, Node, disk_copy)
  6. 复制我希望成为disk_copy的表格
  7. 然后我等待创建表格
  8. 一切似乎按计划进行(没有运行时错误),但是当我转到pwd()时。目录和检查,没有反映我刚刚创建的表的文件。此外,当我在节点上调用mnesia:info()时,没有disk_copy表,只有ram_copy架构。

1 个答案:

答案 0 :(得分:4)

您是否可以检查“正在运行数据库节点”字段是否列出了您已启动的两个节点? 可能是您没有将第二个节点添加到mnesia集群。

因此,如果您的第二个节点被称为BNode,那么在第一个节点上,您将按此顺序运行这些命令:

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

第二:我认为你应该在disk_copy-to-be节点上启动mnesia之前创建模式(步骤3)。(/ p>

这就是我创建您需要的架构的方法:
假设您有2个节点NodeA和NodeB 在开始之前,请确保没有Mnesia目录。

%% 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).