【问题标题】:Ejabberd mnesia database to mysqlEjabberd mnesia 数据库到 mysql
【发布时间】:2011-06-06 17:23:50
【问题描述】:

我有一个来自 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 db 会导致 {{badmatch,{error,eacces}} 以及其他错误。 This 电子邮件显示了我遇到的错误,但我不知道为什么。

【问题讨论】:

    标签: mysql erlang mnesia


    【解决方案1】:

    基于 ejabberdctl 的手册页 ejabberdctl export2odbc 主机目录

    ejabberdctl export2odbc localhost /tmp/sql
    

    【讨论】:

      【解决方案2】:

      Ejabberd 可以使用 ejabberdctl 实用程序将其 mnesia 数据库转储到结构化文本文件中:

      ejabberdctl dump /tmp/ejabberd.db.txt
      

      【讨论】:

      • 我已经将它转储到一个文本文件中。我需要一种简化的方法将其转换为某种关系数据库,例如 mysql。
      【解决方案3】:

      我仍在研究整个 mnesia 节点系统如何工作的细节,但我最终使用它来将数据库加载到 mnesia:

      bash$> erl -name ejabberd@localhost -mnesia dir '"/home/usr/ejabberd@localhost/"'
      

      感谢所有看过的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 2015-12-17
        • 2012-03-03
        • 2023-03-11
        • 2015-08-04
        相关资源
        最近更新 更多