【发布时间】:2016-05-01 08:45:50
【问题描述】:
在我开始这个项目之前,我确定我的数据库已损坏,因此所有新记录都作为 ram_copies 而不是 disc_copies 插入。
所以我做了备份:
mnesia:dump_to_textfile("fixerupper99.txt").
我浏览了文本文件并将 disc_copies 属性添加到文本文件的表列表部分。
此时我停止了我的应用程序和所有额外的节点。我还删除了 mnesia 目录中的所有文件。
rm DECISION_TAB.LOG LATEST.LOG schema.DAT *.DC[DL]
它生成了一个包含所有内容的好文件。架构和记录。经过实验,我意识到它缺少用于持久保存到磁盘 {disc_copies, [metagate@KS0002]} 的 create table 属性。
我遵循的步骤:
- mnesia:stop().
- mnesia:create_schema([nodes()]).
- mnesia:start().
- mnesia:info().
此时一切看起来都还不错。但是是空的。接下来我开始从转储文件中加载数据。 mnesia:load_textfile("fixerupper99.txt").
我立即查看了mnesia:info(). 的信息,一切都如我所料。然后我退出erl 并查看我存储mnesia 数据的文件夹。我希望有 disc_copies 的所有文件都存在于文件夹中,但所有文件实际上都是空的。
好吧,无论我做什么,文件/表似乎仍然被视为 ram_copies,因此它们没有被写入磁盘。
我尝试了change_table_copy_type(),但没有正常工作。
Mnesia:info 说我的文件在磁盘上,但重新启动应用程序会导致所有数据消失。想法?
【问题讨论】:
-
您能解释一下当您尝试拨打
mnesia:change_table_copy_type/3时发生了什么吗?你收到错误了吗?或者它根本没有改变mnesia:info/0的输出? -
另外,您能否提供有关 Mnesia 集群中节点的更多信息?他们都在一台机器上吗?它们都正确连接了吗?你能 ping 通他们吗?