3

我有一个完整的 mnesia ram_copies-only 数据库,但在将 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

您能否检查“运行数据库节点”字段是否列出了您已启动的两个节点?可能是您没有将第二个节点添加到 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)(步骤 2)。

这就是我为创建您需要的模式所做的:
假设您有 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).
于 2012-11-15T14:19:06.113 回答