2013-09-24 23 views
0

我試圖將我們的ejabberd服務器連接到MySQL來添加mod_archive_odbc模塊。我們正在運行ejabberd 2.1.13。服務器的其餘部分使用mnesia進行存儲。我首先嚐試了DSN方法,但失敗了。目前我得到這個錯誤erlang.log:通過本地驅動mod_archive_odbc將ejabberd連接到MySQL

=PROGRESS REPORT==== 24-Sep-2013::13:50:27 === 
      supervisor: {local,ejabberd_sup} 
      started: [{pid,<0.777.0>}, 
         {name,'ejabberd_mod_archive_odbc_chat.hostname.com'}, 
         {mfargs, 
          {mod_archive_odbc,start_link, 
           ["chat.hostname.com", 
           [{database_type,"mysql"}, 
           {default_auto_save,true}, 
           {enforce_default_auto_save,false}, 
           {default_expire,infinity}, 
           {enforce_min_expire,0}, 
           {enforce_max_expire,infinity}, 
           {replication_expire,31536000}, 
           {session_duration,1800}, 
           {wipeout_interval,86400}]]}}, 
         {restart_type,permanent}, 
         {shutdown,1000}, 
         {child_type,worker}] 
=CRASH REPORT==== 24-Sep-2013::13:50:36 === crasher: 
    initial call: mod_archive_odbc:init/1 
    pid: <0.777.0> 
    registered_name: 'ejabberd_mod_archive_odbc_chat.hostname.com' 
    exception exit: {aborted,{no_exists,[sql_pool,"chat.hostname.com"]}} 
     in function gen_server:terminate/6 
    ancestors: [ejabberd_sup,<0.37.0>] 

這是模塊部分是什麼樣子:

{mod_archive_odbc, [{database_type, "mysql"}, 
         {default_auto_save, true}, 
         {enforce_default_auto_save, false}, 
         {default_expire, infinity}, 
         {enforce_min_expire, 0}, 
         {enforce_max_expire, infinity}, 
         {replication_expire, 31536000}, 
         {session_duration, 1800}, 
         {wipeout_interval, 86400}]} 

這是數據庫部分的樣子:

{odbc_server, {mysql, "localhost", "ejabberd", "ejabberd", "password"}}. 

我可以使用ejabberd用戶在本地和遠程連接到mysql服務器。

這裏是的ngrep輸出而發生的錯誤:

# ngrep port 3306 
interface: eth0 (10.179.7.192/255.255.255.192) 
filter: (ip or ip6) and (port 3306) 
^Cexit 
0 received, 0 dropped 

# ngrep -d lo port 3306 
interface: lo (127.0.0.0/255.0.0.0) 
filter: (ip or ip6) and (port 3306) 
^Cexit 
0 received, 0 dropped 

這裏是的ngrep輸出,如果我通過另一臺計算機與ejabberd用戶連接到MySQL網絡

# ngrep port 3306 
interface: eth0 (10.179.7.192/255.255.255.192) 
filter: (ip or ip6) and (port 3306) 
#### 
T 10.179.7.235:3306 -> XX.XXX.XXX.XXX:55909 [AP] 
    J....5.5.32.....xxpKb-VK...................UKXV(a2rh6r].mysql_native_password. 
## 
T XX.XXX.XXX.XXX:55909 -> 10.179.7.235:3306 [AP] 
    >...................................ejabberd....).p.P..lt=BTK..w.. 
## 
T 10.179.7.235:3306 -> XX.XXX.XXX.XXX:55909 [AP] 
    ........... 
# 
T XX.XXX.XXX.XXX:55909 -> 10.179.7.235:3306 [AP] 
    !....select @@version_comment limit 1 
# 
T 10.179.7.235:3306 -> XX.XXX.XXX.XXX:55909 [AP] 
    .....'[email protected]@version_comment............................MySQL Community Server (GPL)......... 
## 
T XX.XXX.XXX.XXX:55909 -> 10.179.7.235:3306 [AP] 
    ..... 
### 

MySQL的模塊上似乎已安裝:

([email protected])1> ejabberd_check:check_database_module(mysql). 
ok 
+0

這將是有用的,如果你能跟蹤端口3306,重啓ejabberd(例如用的ngrep)的活動和展示的痕跡。你使用的是什麼版本的ejabberd? – giavac

+0

@giavac感謝您的建議。我編輯了我的帖子以包含輸出。看起來MySQL沒有看到任何來自ejabberd的東西。該版本是2.1.13。 ejabberd/erlang控制檯中的 –

+0

會執行'ejabberd_check:check_database_module(mysql).' return ok? –

回答

2

問題是我改變了m在實際服務中沒有更新。另一個問題,How to uninstall odbc for Ejabberd?,以及@giavac的上述評論讓我意識到,顯然配置文件並不總是權威的配置。

具體來說,我加入這一行固定我的問題:

override_local. 
+0

如果你告訴我mod_archive_odbc的總進程... – Karthik

+0

@JamesVo你究竟在做什麼?你是否遇到了我描述的同樣的問題? –

相關問題