24

我是 erlang 和 mnesia 新手..

如何将新的 disc_only_copies 节点添加到已经有模式的 mnesia 数据库?

谢谢

4

1 回答 1

48

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

在您的原始节点 ( a@node) 上,在 erlang 提示符处执行mnesia:change_config(extra_db_nodes, ['b@node']).这将导致原始节点连接b到 mnesia 集群。此时,b@node已加入集群但只有模式的副本。

为了使新节点b@node能够存储磁盘副本,我们需要将模式表类型b@node从更改ram_copiesdisc_copiesmnesia:change_table_copy_type(schema, 'b@node', disc_copies).在任何节点上运行。

b@node此时只有架构的副本。要将所有表复制a@nodeb@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变量替换为 to以复制表,但确保它们仅在磁盘上。disc_only_copiesmnesia:add_table_copy/3

mnesia 文档解释了如何使用我在这里展示的功能。

于 2009-04-25T12:46:26.467 回答