【问题标题】:Ejabberd roster with mysql使用 mysql 的 Ejabberd 名册
【发布时间】:2013-02-23 22:20:40
【问题描述】:

我正在使用 exauth 和 ejabberd 来验证我的用户,但我想使用 mysql 来存储用户信息,例如 GROUPS、名册等。

这是我的配置。

{auth_method, external}.
{extauth_program, "/home/hitesh/ejabberd_auth.php"}.

{host_config, "subdomain.nodyssey.com", [{auth_method, [external, anonymous]}]}.

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

mysql 数据库为空!用户在群聊中仍然有花名册和聊天记录,所以看起来 mnesia 数据库正在被使用!我该如何切换到mysql?

我做错了什么?

【问题讨论】:

  • 你创建了mysql数据库吗?你以前用mnesia 做名册吗?如果是这样,您是否迁移了数据?最后一件事,你在 ejabberd.cfg mod_roster_odbc 中启用了吗?
  • @user601836 我该怎么做? {mod_roster_odbc,[]} 喜欢这样?
  • 是的,加上禁用mod_odbc...当然你需要mysql连接所需的所有模块
  • 好的,mod_odbc 被禁用,mysql 连接正常,mysql 模块已上传并且工作正常。但它仍然使用 mynesia 数据库!这是我的配置,gist.github.com/hiteshjoshi/5117477
  • 对不起。我的意思是你必须禁用 mod_roster..not mod_odbc...mod_roster enabled 意味着 mnesia 支持名册。

标签: erlang xmpp ejabberd


【解决方案1】:

user601836 是正确的。我最初误解了这个问题。假设正确安装了 odbc 和 mysql 驱动程序,这里是更新的答案:

  1. 您是否创建了 mysql 表来存储名册数据等?您的所有 ejabberd 表也是使用 innodb 引擎创建的吗? 您可以在 github 中获取架构:https://github.com/processone/ejabberd/blob/2.1.x/src/odbc/mysql.sql。您也可以在 ejabberd 安装文件夹中找到它。我的在这个位置:ejabberd_installation_root/lib/ejabberd-2.1.11/priv/sql/mysql.sql。
  2. 使用 ejabberd.cfg 中的 *_odbc 替换相关模块名称。例如,将 mod_roster 替换为 mod_roster_odbc,将 mod_muc 替换为 mod_muc_odbc。此处列出了许多 odbc 支持的模块: ... {mod_offline_odbc, []}, {mod_last_odbc, []}, {mod_roster_odbc, []}, {mod_shared_roster_odbc,[]}, {mod_vcard_odbc, []}, {mod_muc_odbc,[ ...]}, {mod_pubsub_odbc,[ ...]}, ...

详细的模块信息请查看官方文档:

https://git.process-one.net/ejabberd/mainline/blobs/raw/v2.1.11/doc/guide.html#modoverview

【讨论】:

  • AFAIK 身份验证方法不影响 ejabberd 中的排班
  • 你是对的。我误解了这个问题。更新了答案
  • 谢谢,这看起来很有希望。另外,您认为所有 *_odbc 模块都已安装吗?或者我需要重新安装它们吗?另外,当我运行 MYSQL 脚本时,我的 MySql 服务器不接受这个,“SET table_type=InnoDB;”所以我删除了它并安装了其余的 SQL 命令,它会工作吗?如果没有那么我如何用innodb安装mysql!对不起,这是另一个问题。但如果你能帮忙的话。
  • 默认安装所有 *_odbc。但是,如果您手动安装 ejabberd,则必须指定“--enable-odbc”选项。
  • 你最好使用innodb。不确定如果它是 myisam 引擎会发生什么。您可以运行“show create table one_of_the_ejabberd_table_name;”查看存储引擎是否为innodb。我的猜测是您使用的是 MySQL 5.5,它不再具有 table_type 变量。查看stackoverflow.com/questions/14517323/…的解决方案
【解决方案2】:

这个问题被问到已经有一段时间了。同时,Ejabberd 配置文件已更改。要启用外部名册存储,假设配置了 ejabberd 和 mysql 数据库和 ejabberd 架构,您只需在 ejabberd.yml 中执行以下操作:

sql_type: mysql
sql_server: "localhost"
sql_database: "some_database_name"
sql_username: "some_username"
sql_password: "some_password"

并更改mod_roster: {}

mod_roster:
   db_type: sql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多