【问题标题】:How to add a node to an mnesia cluster?如何将节点添加到 mnesia 集群?
【发布时间】:2010-10-21 17:25:58
【问题描述】:

我是 erlang 和 mnesia 新手..

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

谢谢

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    启动您的新节点 (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 更改为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 的精确复制品。您可以修改该语句 - 在对 mnesia:add_table_copy/3 的调用中将 Type 变量替换为 disc_only_copies 以复制表,但确保它们仅在磁盘上。

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

    【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2016-08-16
    • 2016-09-20
    • 2016-09-04
    • 2016-07-09
    • 2021-06-21
    • 2020-09-13
    • 2020-04-23
    相关资源
    最近更新 更多