如何向 mnesia 集群添加节点?

发布于 2024-07-18 03:53:08 字数 97 浏览 10 评论 0原文

我是 erlang 和 mnesia 新手。

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

谢谢

I'm an erlang and mnesia newbie..

How do I add a new disc_only_copies node to an mnesia database that already has a schema?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千年*琉璃梦 2024-07-25 03:53:09

启动新节点 (b@node) erl -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 更改为光盘副本。 在任意节点上运行 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 的精确副本。 您可以修改该语句 - 在调用 mnesia:add_table_copy/3 时将 Type 变量替换为 disc_only_copies 以复制表,但确保它们仅在光盘上。

mnesia 文档 解释了如何使用我在此处显示的函数。

Start your new node (b@node) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia. This starts a new ram_copies node called b@node.

On your original node (a@node), at the erlang prompt execute mnesia:change_config(extra_db_nodes, ['b@node']). This will cause the original node to connect b to the mnesia cluster. At this point, b@node has joined the cluster but only has a copy of the schema.

To make new the node b@node capable of storing disc copies, we need to change the schema table type on b@node from ram_copies to disc_copies. Run mnesia:change_table_copy_type(schema, 'b@node', disc_copies). on any node.

b@node only has a copy of the schema at this point. To copy all the tables from a@node to b@node and maintain table types, you can run:

[{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)]].

This command may take a while to execute as it will copy the contents of each table over the network.

b@node is now an exact replica of a@node. You could modify that statement - replace the Type variable with disc_only_copies in the call to mnesia:add_table_copy/3 in order to copy the tables but ensure they're on disc only.

The mnesia documentation explains how to use the functions I've shown here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文