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

Rails生产环境下Trilogy无法连接远程MySQL但mysql2可正常连接

问题分析与解决方案

你的核心问题是Trilogy适配器在同时配置host和socket时,会优先使用socket建立本地连接,导致本应连接远程DB_IP_ADDR的primary数据库,实际尝试用本地socket连接,触发了'us'@'localhost'的权限验证,而该用户并无远程数据库的访问权限,因此报错。

具体修复步骤

  • 移除production.primary配置中的socket参数:远程数据库连接不需要本地socket,Trilogy在同时存在host和socket时,会优先选择socket连接,这和mysql2的行为存在差异。
  • 修正cache配置中的拼写错误:endoding应为encoding,避免后续可能出现的编码问题。

修改后的config/database.yml示例:

production:
  primary:
    adapter:  trilogy
    database: remote_production_db
    host:     DB_IP_ADDR
    username: us
    password: password
    encoding: utf8
  cache:
    adapter:  trilogy
    database: our_solid_cache_db
    host:     127.0.0.1
    username: us
    password: cache_password
    socket:   /var/run/mysqld/mysqld.sock
    encoding: utf8
    migrations_paths: "db/cache/migrate"

额外验证点

  1. 确认远程MySQL服务器的防火墙/安全组已开放3306端口给PRODUCTION_IP_ADDR(既然mysql2能正常连接,这一步大概率没问题,但可快速排查)。
  2. 再次确认远程MySQL的'us'@'PRODUCTION_IP_ADDR'用户权限已正确配置并刷新:
# 在DB_IP_ADDR执行
mysql> SHOW GRANTS FOR 'us'@'PRODUCTION_IP_ADDR';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:41:15