我有一个来自ejabberd服务器的mnesia数据库转储(DCD,DCL和DAT文件),我正试图从这个数据库中恢复任何数据。将它转换为某种SQL数据库是理想的,但我会选择简单的文本转储(从那里我可以重建数据库)。
我是erlang / mnesia的新手,但这是我设法从online docs做的事情:
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数据库会导致{{badmatch,{error,eacces}}
等错误。 This电子邮件显示我收到的错误,但我不确定原因。
答案 0 :(得分:1)
Ejabberd可以使用ejabberdctl
实用程序将其mnesia数据库转储到结构化文本文件中:
ejabberdctl dump /tmp/ejabberd.db.txt
答案 1 :(得分:0)
我还在研究整个mnesia节点系统如何工作的细节,但我最终使用它来将数据库加载到mnesia中:
bash$> erl -name ejabberd@localhost -mnesia dir '"/home/usr/ejabberd@localhost/"'
感谢任何看过的人。
答案 2 :(得分:0)
基于ejabberdctl的手册页 ejabberdctl export2odbc主目录
ejabberdctl export2odbc localhost /tmp/sql