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

ejabberd 23.4配置MariaDB后MySQL连接失败求助

ejabberd 23.4 无法连接MariaDB:'mysql connection failed: Reason: normal' 诊断与解决建议

针对你遇到的ejabberd切换MariaDB后连接失败、认证被中止的问题,以下是分步诊断和解决建议:

诊断步骤

  • 核对ejabberd.yml的SQL配置细节
    确认已明确设置sql_type: mysql(仅设置default_db: sql不够,需指定数据库类型);检查sql_server、sql_database、sql_username、sql_password是否完全匹配MariaDB配置,注意密码含特殊字符(如#、!)时需用反斜杠转义;确认sql_port与MariaDB监听端口一致(默认3306);若MariaDB未开启SSL,必须设置sql_ssl: false。

  • 验证MariaDB用户认证插件与权限
    登录MariaDB执行:SELECT user,host,plugin FROM mysql.user WHERE user='你的ejabberd用户名';,确认插件为mysql_native_password(ejabberd对caching_sha2_password兼容性差)。若插件不符,重新授权:

    GRANT ALL PRIVILEGES ON ejabberd数据库名.* TO 'ejabberd用户名'@'ejabberd主机IP或localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;
    

    同时确认用户的host限制正确,避免主机名解析问题,优先用IP或localhost(本地连接时)。

  • 测试ejabberd系统用户的连通性
    切换到ejabberd运行的系统用户(如ejabberd),执行:mysql -h MariaDB主机 -u ejabberd用户名 -p ejabberd数据库名,输入密码后确认能正常连接。若远程连接,用nc -zv MariaDB主机 3306测试端口是否放行。

  • 检查ejabberd驱动依赖
    执行ejabberdctl modules_available | grep mysql,确认MySQL驱动模块已可用;查看ejabberd启动日志,排查是否有驱动加载失败的提示。

解决建议

  • 修正ejabberd.yml配置,示例正确片段:
    default_db: sql
    sql_type: mysql
    sql_server: "127.0.0.1"
    sql_database: "ejabberd"
    sql_username: "ejabberd_user"
    sql_password: "your_escaped_password"
    sql_port: 3306
    sql_ssl: false
    
  • 强制使用mysql_native_password认证:这是此类连接失败的常见原因,ejabberd目前对新的SHA2认证插件支持有限。
  • 排查系统安全限制:如SELinux可能阻止ejabberd进程连接数据库,可临时执行setenforce 0测试,若恢复正常,需添加SELinux规则允许ejabberd访问MariaDB端口。
  • 重新验证数据导入完整性:备份当前MariaDB数据后,用ejabberdctl export2sql重新导出Mnesia数据并导入MariaDB,确保表结构和数据无损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:43:14