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
相关产品推荐
相关产品推荐

