如何阻止ejabberd使用mnesia

时间:2010-12-03 22:12:32

标签: ejabberd mnesia

我正在尝试建立一个将数据库从崩溃的服务器恢复到新服务器的过程。我的服务器正在运行Ejabberd作为XMPP服务器,我将其配置为使用postgresql而不是mnesia - 或者我认为。

我的过程类似于“转储原始数据库的内容,运行新服务器,使用psql恢复数据库的内容,然后运行系统”。但是,当我再次尝试运行Ejabberd时,我遇到了崩溃:

=CRASH REPORT==== 3-Dec-2010::22:05:00 ===
  crasher:
    pid: <0.36.0>
    registered_name: []
    exception exit: {bad_return,{{ejabberd_app,start,[normal,[]]},
                                 {'EXIT',"Error reading Mnesia database"}}}
      in function  application_master:init/4

我认为我的系统在PostgreSQL上运行,而我似乎还在使用Mnesia。我有几个问题:

  1. 如何确保不使用mnesia?
  2. 如何将所有ejabberd活动转移到PGSQL?
  3. 这是我的ejabberd.cfg文件中的模块部分:

    {modules,
     [
      {mod_adhoc,    []},
      {mod_announce, [{access, announce}]}, % requires mod_adhoc
      {mod_caps,     []},
      {mod_configure,[]}, % requires mod_adhoc
      {mod_ctlextra, []},
      {mod_disco,    []},
      {mod_irc,      []},
      {mod_last_odbc,     []},
      {mod_muc,      [
          {access, muc},
          {access_create, muc},
          {access_persistent, muc},
          {access_admin, muc_admin},
          {max_users, 500}
         ]},
      {mod_offline_odbc,  []},
      {mod_privacy_odbc,  []},
      {mod_private_odbc,  []},
      {mod_pubsub,   [ % requires mod_caps
          {access_createnode, pubsub_createnode},
          {plugins, ["default", "pep"]}
         ]},
      {mod_register, [
          {welcome_message, none},
          {access, register}
         ]},
      {mod_roster_odbc,   []},
      {mod_stats,    []},
      {mod_time,     []},
      {mod_vcard_odbc,    []},
      {mod_version,  []}
     ]}.
    

    我错过了什么?

    我假设崩溃是由于Ejabberd使用的mnesia DB,并且因为它与PGSQL DB不同步,所以它无法正常运行 - 但也许我完全偏离了这里,并且会喜欢某个方向

    编辑:解决了一个问题。由于我正在使用亚马逊云,我需要对ERLANG_NODE进行硬编码,因此它不会被主机名定义(在重启时会更改)。这让我的ejabberd运行,但我仍然希望停止使用mnesia,我想知道ejabberd的哪一部分仍在使用它,我怎么能找到它。

3 个答案:

答案 0 :(得分:2)

我上周亲自了解了一些关于ejabberd的事情。

如果您运行的是mnesia以外的任何数据库,那么您运行的所有模块都不会实际与之通信。

例如,即使您已将服务器配置为使用postgress,mod_admin_extra仍将继续使用mnesia db。因此,如果您通过mod_admin_extra提供的额外命令(和其他模块)进行大量添加/删除名单/用户,那么您将不得不找到其他方法来执行此操作。

基本上,没有办法让ejabberd完全停止使用mnesia db,它总会将它用于某种处理。

答案 1 :(得分:0)

看起来你错过了一个需要用_odbc重命名的模块,即mod_pubsub _&gt; mod_pubsub_odbc

请参阅here

也可能值得查看/ var / lib / ejabberd目录,只是想看看有哪些DCD / DCL文件,据我所知,这些文件是mnesia的db文件。然后,您可以尝试确定是否有任何其他模块需要配置为指向MySQL。

答案 2 :(得分:0)

根据您的应用程序,您很可能不需要ejabberd.cfg文件中列出的90%的模块。最基本的:

  • mod_roster_odbc
  • mod_offline_odbc
  • mod_register

有关更多ejabberd提示,请参阅:

http://www.quora.com/What-are-some-tricks-to-scale-ejabberd