如何将节点添加到mnesia集群?

时间:2009-04-24 22:09:12

标签: erlang mnesia

我是erlang和mnesia的新手......

如何将新的disc_only_copies节点添加到已有架构的mnesia数据库?

由于

1 个答案:

答案 0 :(得分:43)

开始新节点(b@nodeerl -sname b -mnesia dir '"/path/to/storage"' -s mnesia。这将启动一个名为b@node的新ram_copies节点。

在原始节点(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 documentation解释了如何使用我在此处显示的功能。