我正在尝试建立一个将数据库从崩溃的服务器恢复到新服务器的过程。我的服务器正在运行 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。我有几个问题:
- 我如何确保没有使用 mnesia?
- 如何将所有 ejabberd 活动转移到 PGSQL?
这是我的 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 不同步,因此它无法正确运行 - 但也许我完全偏离了轨道,并且希望得到一些指导。
EDIT: 解决了一个问题。由于我使用的是亚马逊云,我需要对 ERLANG_NODE 进行硬编码,这样它就不会由主机名定义(主机名会在重新启动时更改)。这让我的 ejabberd 运行起来,但我仍然希望停止使用 mnesia,我想知道 ejabberd 的哪一部分仍在使用它以及我如何找到它。