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

Server1出现MySQL client is not connected(Mysql2::Error)故障排查求助

Server1 MySQL连接失败(Mysql2::Error: MySQL client is not connected)排查与解决

问题背景

两台服务器Server1、Server2同时对接同一MySQL服务,Server2可正常通信,但Server1触发如下错误:

MySQL client is not connected (Mysql2::Error)

Server1完整报错日志:

I, [2023-06-15T06:07:30.674196 #5178]  INFO -- : 2023-06-15T06:07:30+0000: [Worker(delayed_job host:94656cbd8b56 pid:5178)] Error while reserving job: MySQL client is not connected
F, [2023-06-15T06:07:30.675210 #5178] FATAL -- : MySQL client is not connected (Mysql2::Error)
/home/site/wwwroot/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/mysql2_adapter.rb:82:in `escape' /home/site/wwwroot/vendor/bundle/ruby/2.7.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/mysql2_adapter.rb:82:in `quote_string'

可能原因

  • Server1本地网络/防火墙拦截:Server1到MySQL的网络链路中断,比如本地防火墙新增了MySQL端口拦截规则,或路由配置异常,导致无法建立TCP连接。由于Server2正常,排除MySQL服务本身故障。
  • Server1连接配置错误:数据库连接参数(主机、端口、账号密码)被误改,或连接池配置过小导致连接耗尽,新请求无法获取可用连接。
  • MySQL端对Server1的限制:MySQL权限表中移除了Server1 IP的访问权限;或MySQL总连接数达上限,Server1的新请求被拒绝;也可能是MySQL服务器防火墙对Server1 IP做了限流/封禁。
  • mysql2 gem依赖异常:gem安装文件损坏,或版本与ActiveRecord 5.2.3不兼容,导致客户端连接逻辑出错。从报错栈看,是调用escape方法时发现连接已失效。
  • 长连接超时未重连:MySQL的wait_timeout/interactive_timeout设置过短,Server1的长连接被主动断开,但应用未配置自动重连,后续请求复用失效连接对象。

解决步骤

1. 排查网络连通性

  • 在Server1执行telnet <mysql_host> <mysql_port>或nc -zv <mysql_host> <mysql_port>,测试端口连通性。
  • 检查Server1本地防火墙(如ufw、iptables)是否拦截MySQL端口,同时确认MySQL服务器端防火墙允许Server1 IP访问。
  • 执行netstat -anp | grep mysql,查看是否有大量TIME_WAIT/CLOSE_WAIT状态的异常连接。

2. 验证连接配置

  • 对比Server1与Server2的database.yml配置文件,确认主机、端口、账号密码、数据库名完全一致。
  • 在Server1用命令行手动连接:mysql -h <mysql_host> -P <mysql_port> -u <user> -p,验证权限和连接是否正常。

3. 检查MySQL端限制

  • 登录MySQL执行SHOW GRANTS FOR '<db_user>'@'<server1_ip>';,确认Server1 IP有对应数据库的访问权限。
  • 执行SHOW VARIABLES LIKE 'max_connections';和SHOW STATUS LIKE 'Threads_connected';,检查当前连接数是否接近上限。
  • 查看MySQL错误日志,搜索是否有针对Server1 IP的连接拒绝记录。

4. 修复gem依赖

  • 在Server1重新安装mysql2 gem:bundle install --force mysql2,确保文件完整。
  • 确认mysql2 gem版本与ActiveRecord 5.2.3兼容(推荐2.1.x或2.2.x版本,避免过高版本的兼容性问题)。

5. 优化连接池与重连机制

  • 在database.yml中添加reconnect: true开启自动重连(注意:自动重连可能导致事务上下文丢失,需结合业务场景评估)。
  • 调整pool: <合理数值>,根据Server1的并发请求数设置连接池大小,避免连接耗尽。
  • 检查应用代码,确保请求完成后正确释放连接,避免连接泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:17:10