我試圖將我們的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
這將是有用的,如果你能跟蹤端口3306,重啓ejabberd(例如用的ngrep)的活動和展示的痕跡。你使用的是什麼版本的ejabberd? – giavac
@giavac感謝您的建議。我編輯了我的帖子以包含輸出。看起來MySQL沒有看到任何來自ejabberd的東西。該版本是2.1.13。 ejabberd/erlang控制檯中的 –
會執行'ejabberd_check:check_database_module(mysql).' return ok? –