在此讨论中,呈现了与您所面临的情况类似的情况。
从该来源阅读:
在启动时,Mnesia 尝试与其他节点连接,如果成功,它会从它们加载它的表。如果其他节点已关闭,它会在其本地事务日志中查找 mnesia_down 标记,以确定它是否具有其表的一致副本。最后关闭的节点具有来自所有其他节点的 mnesia_down。这意味着它可以安全地加载其表。如果首先启动的其他一些节点(如您的情况)Mnesia 将无限期地等待另一个节点连接以加载其表
您首先关闭节点 1,因此它没有mnesia_down
来自其他节点的。如果您颠倒关闭命令会发生什么?
此外,应该可以通过force_load_table/1函数强制加载表:
force_load_table(Tab) -> yes | ErrorDescription
用于表加载的 Mnesia 算法可能会导致无法加载表的情况。当一个节点启动并且 Mnesia 断定或怀疑该表的另一个副本在此本地副本由于系统崩溃而变得不活动后处于活动状态时,就会发生这种情况。
如果这种情况不可接受,可以使用该函数覆盖 Mnesia 表加载算法的策略。这可能会导致某些事务效果因数据库不一致而丢失的情况,但对于某些应用程序而言,高可用性比一致的数据更重要。