我有一个来自 ejabberd 服务器(DCD、DCL 和 DAT 文件)的 mnesia 数据库转储,并且我正在尝试从该数据库中恢复任何数据。将它转换为某种 SQL 数据库是理想的,但是我会接受一个简单的文本转储(从那里我可能会重建数据库)。
我是 erlang/mnesia 新手,但这是我从在线文档中设法做到的:
bash$> erl -mnesia dir '"ejabberd_dump_dir"'
...Erlang loads...
1> mnesia:start().
2> mnesia:info().
[snip]
stopped db nodes = [ejabberd_dump_dir]
[snip]
remote = [ list of the tables from ejabberd_dump_dir ]
[snip]
3> tv:start().
当电视启动时,它只是显示表名并说它们有 0 条记录。我猜有某种方法可以再次将它加载到内存中,但我还没有弄清楚如何基于文档。
我的另一个想法是尝试使用 ejabberd 的另一个安装来加载它,但是似乎使用 ejabberdctl 的唯一方法是从文本文件中加载它。
如何加载此数据库并将其转储到 sql 中或将其转储为可以通过 sql 导入的格式?我错过了什么?
更新:我一直在尝试将此数据库恢复到临时 ejabberd 服务器,如下所示:
bash$> ejabberdctl --auth admin ejabberd passwd restore ejabberd /home/user/ejabberddmpdir/
bash$> ejabberdctl --auth admin ejabberd passwd export2odbc ejabberd /home/user/mnesiatosql/
第一个命令失败并迫使我得出结论,我很快就会输掉人与机器之间的战争。我不肯定,但我认为使用 ejabberd 作为主机将使用 localhost 作为节点。有任何想法吗?
更新:我认为这可能是一个权限问题,因为尝试导出默认的 ejabberd db 会导致{{badmatch,{error,eacces}}
其他错误。 这封电子邮件显示了我收到的错误,但我不知道为什么。