Erlang mnesia文件损坏需要通过取证将所有内容转储

Erlang mnesia文件损坏需要通过取证将所有内容转储,erlang,mnesia,Erlang,Mnesia,由于高估了实施的脆弱性,我已经损坏了我的Mnesia数据库,无法修复。当我尝试Mnesia API时,我需要的记录不可见,即使它们的键在文件中可见。即使文档表明Mnesia工件是DETS文件,它们也不能用DETS工件打开或标识为DETS工件。PS:dump_to_textfile()也不起作用。最终我能够转储我的数据库。这并没有结束我的记忆问题,但它给了我以前没有的选择 设置: 最初我实现了一个主mnesia集群。(阅读文档)。事实证明,即使是最老练的Erlang程序员也不会使用Mnesia复制

由于高估了实施的脆弱性,我已经损坏了我的Mnesia数据库,无法修复。当我尝试Mnesia API时,我需要的记录不可见,即使它们的键在文件中可见。即使文档表明Mnesia工件是DETS文件,它们也不能用DETS工件打开或标识为DETS工件。PS:dump_to_textfile()也不起作用。

最终我能够转储我的数据库。这并没有结束我的记忆问题,但它给了我以前没有的选择

设置: 最初我实现了一个主mnesia集群。(阅读文档)。事实证明,即使是最老练的Erlang程序员也不会使用Mnesia复制,因为存在许多缺陷。事实上,我是从Erlang内圈和一些L1团队那里得到这些信息的。然而,就我而言,这项工作已经在生产中。这就是问题开始的时候

我们开始出现数据库一致性错误,我最喜欢的是网络或数据库分区错误。它需要一个非常熟练和知识渊博的人来恢复,以及大量的计划和代码提前;我没有

最终我采取了两个步骤。(a) 删除了第二个应用程序,因此即使DB位于主集群中;一个是奴隶,因为它从未被用作主人。(b) 在第二个实现中,我拆分了集群,这样应用程序就可以在一个节点上用一个DB运行#a在生产中,b是热备用。复制是手动的,因为写入非常罕见

在单节点部署中,有两个节点。第一个节点是应用程序;app@ks在同一个硬件上有一个“erl”节点,当我需要rpc到应用程序中查看情况时

我的解决方案: 当我发布这个问题时,我正试图转储我的Mnesia DB的内容。我遇到了很多问题,因为在应用程序节点运行时,我试图从管理节点访问数据库

因为我试图从erl节点访问mnesia库,所以DB不是erl节点的本地数据库,所以dump_to_textfile生成了一个空文件。当我用rpc告诉客户时,我终于成功了app@ks要转储的节点

仍未定义 当我启动管理节点时,我将mnesia dir参数设置为与管理节点相同的文件夹app@ks节点。我模糊地记得这是不可取的


还有更多的记忆问题需要解决,但没有一个是我报告的问题。但是我仍然不知道如何从各种数据库文件中提取原始数据。

你能解释一下
mnesia:dump_to_textfile/1
是如何不起作用的吗?您是否收到错误,或者调用成功,并且函数调用
mnesia:load_textfile/1
无法导入数据?@Stratus3D我对dump_to_textfile()的引用只是一个PS。随附文档表明这只是出于教育目的。更大的问题是,我无法从数据库中提取数据,即使文档也表明是DETS或ETS,我也无法打开任何Mnesia数据文件。