我有一个完整的mnesia ram_copies-only数据库但我在向节点添加disk_copy表时遇到问题。目前我这样做:
创建我的所有ram_copy表/节点
在disk_copy-to-be节点上启动mnesia。
mnesia:create_schema([Node])
mnesia:add_table_copy(table, Node, disk_copy)
一切似乎按计划进行(没有运行时错误),但是当我转到pwd()时。目录和检查,没有反映我刚刚创建的表的文件。此外,当我在节点上调用mnesia:info()
时,没有disk_copy表,只有ram_copy架构。
答案 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).