2010-12-03 68 views
2

我想建立一個程序,用於從崩潰的服務器將數據庫恢復到新的服務器。我的服務器運行Ejabberd作爲XMPP服務器,並且我將它配置爲使用postgresql而不是mnesia--或者我想。如何停止使用mnesia ejabberd

我的過程類似於「轉儲原始數據庫的內容,運行新服務器,使用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?

這是我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數據庫造成的,並且由於它與PGSQL數據庫不同步,所以無法正常運行 - 但也許我完全偏離了這裏的軌道,並且會喜歡一些方向。

編輯:解決了一個問題。由於我使用的是亞馬遜雲,因此我需要對ERLANG_NODE進行硬編碼,因此不會由主機名(在重新啓動時更改)定義。這讓我的ejabberd運行,但我仍然希望停止使用mnesia,並且我想知道ejabberd的哪個部分仍在使用它,我怎麼能找到它。

回答

0

貌似你錯過了那些需要與他們_odbc改名的一個模塊,即mod_pubsub _> mod_pubsub_odbc

here

它也可能是值得期待通過在/ var/lib中/ ejabberd目錄,只是看看有什麼DCD/DCL文件,據我所知,這些文件是mnesia的db文件。然後,您可以嘗試確定是否還有其他模塊需要配置爲指向MySQL。

+0

謝謝。的確mod_pubsub在我的配置中不是odbc。然而,我在我的安裝中找不到mod_pubsub_odbc,所以我不知道我的安裝是舊的還是我錯過了一些東西。 – 2011-02-25 06:55:50

2

我個人瞭解到了一些關於這個ejabberd上個星期。

如果您正在運行除mnesia之外的任何數據庫,那麼並非您運行的所有模塊都將實際與它通信。

例如,mod_admin_extra將繼續與mnesia db配合使用,即使在您將服務器配置爲使用postgress後也是如此。因此,如果您通過mod_admin_extra提供的額外命令(以及其他模塊)來執行大量添加/刪除名單/用戶,那麼您將不得不尋找其他方法來執行此操作。

基本上,沒有辦法讓ejabberd完全停止使用mnesia數據庫,它會一直使用它進行某種處理。