gpt4 book ai didi

erlang - 创建现有 ram 表的 mnesia disk_copies

转载 作者:行者123 更新时间:2023-12-04 03:03:27 26 4
gpt4 key购买 nike

我有一个完整的 mnesia ram_copies-only 数据库,但我在向节点添加 disk_copy 表时遇到问题。目前我这样做:

  1. 创建我所有的 ram_copy 表/节点

  2. 在 disk_copy-to-be 节点上启动 mnesia。

  3. 使用 mnesia:create_schema([Node])
  4. 创建一个新模式(我没有为 ram_copy 表创建模式)
  5. 复制我希望成为 disk_copy 的表,使用 mnesia:add_table_copy(table, Node, disk_copy)
  6. 然后我等待创建表

一切似乎都按计划进行(没有运行时错误),但是当我转到 pwd() 时。目录并检查,没有反射(reflect)我刚刚创建的表的文件。此外,当我在节点上调用 mnesia:info() 时,没有 disk_copy 表,只有 ram_copy 模式。

最佳答案

你能检查“正在运行的数据库节点”字段是否列出了你已经启动的两个节点吗?可能是您没有将第二个节点添加到 mnesia 集群。

因此,如果您的第二个节点称为 BNode,那么您将在第一个节点上按以下顺序运行这些命令:

1) mnesia:change_config(extra_db_nodes, [BNode]).  
2) mnesia:add_table_copy(table, BNode, disc_copies).

其次:我认为您应该在 disk_copy-to-be 节点上启动 mnesia(第 2 步)之前创建模式(第 3 步)。

这就是我为创建您需要的架构所做的工作:
假设您有 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).

关于erlang - 创建现有 ram 表的 mnesia disk_copies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com