You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ejabberd连接MySQL失败求助:附日志及配置信息

解决ejabberd连接MySQL的connect_failed问题

首先先看你提供的关键错误日志:

2018-05-15 21:40:05.965 [error] <0.414.0>@ejabberd_sql:log:950 p1_mysql_conn: post_start error connect_failed 
2018-05-15 21:40:05.965 [info] <0.414.0>@ejabberd_sql:connecting:339 mysql connection failed:

从日志和你给出的配置来看,咱们一步步排查:

1. 确认MySQL服务是否正常运行

先检查MySQL服务器的状态:

  • Linux系统可以执行:systemctl status mysql,看服务是否处于active (running)状态
  • 如果是Windows,打开服务管理器,找到MySQL服务确认是否启动

同时测试端口连通性,在ejabberd服务器上执行:

telnet ejabberd 3306
# 或者用nc命令
nc -zv ejabberd 3306

如果连接被拒绝,说明端口不通,要么MySQL没监听这个端口,要么防火墙拦截了。

2. 验证数据库登录凭据

你的配置里sql_password为空,需要确认:

  • MySQL的ejabberd用户是否允许空密码登录:登录MySQL控制台,执行SELECT user, host FROM mysql.user WHERE user='ejabberd';,然后检查该用户的authentication_string是否为空(对应空密码)
  • 尝试手动登录测试:mysql -u ejabberd -p -h ejabberd,如果密码为空直接回车,看是否能成功登录到ejabberd数据库
  • 如果ejabberd和MySQL不在同一机器,还要确认ejabberd用户是否允许远程连接,执行:
GRANT ALL PRIVILEGES ON ejabberd.* TO 'ejabberd'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;

(这里的%允许所有IP连接,你也可以指定ejabberd服务器的具体IP更安全)

3. 核对ejabberd配置细节

检查你给出的核心数据库配置项:

MySQL server: 
sql_type: mysql 
sql_server: "ejabberd" 
sql_database: "ejabberd" 
sql_username: "ejabberd" 
sql_password: "" 
sql_port: 3306
default_db: sql
sql_pool_size: 10
new_sql_schema: true
  • 确认sql_server的值是否是MySQL服务器的正确主机名或IP地址,如果是主机名,要确保ejabberd服务器能解析到这个主机对应的IP
  • 检查MySQL的配置文件(比如my.cnf或my.ini),确认port配置确实是3306,并且bind-address没有限制只能本地连接(如果是远程连接的话)

4. 检查防火墙/安全组

如果ejabberd和MySQL不在同一服务器:

  • 检查MySQL服务器的防火墙,是否允许3306端口的入站流量来自ejabberd服务器的IP
  • 如果是云服务器,还要检查云平台的安全组规则,确保3306端口对外开放给ejabberd的IP

另外,你的模块配置里mod_roster的db_type设置为sql,这个是没问题的,等连接问题解决后就能正常使用。

内容的提问来源于stack exchange,提问作者Devid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:16