当前位置: 首页 > news >正文

dial tcp 10.1.68.88:3306: connect: cannot assign requested address

目录

      • 1. **本地端口耗尽(最常见原因)**
      • 2. **网络配置问题**
      • 3. **DNS或IP解析问题**
      • 4. **系统资源限制**
      • 排查步骤总结:

在Go语言中遇到 dial tcp 10.1.68.88:3306: connect: cannot assign requested address 错误,通常是由以下原因导致的:

1. 本地端口耗尽(最常见原因)

  • 问题本质:当客户端频繁创建TCP连接时,操作系统会为每个连接分配一个临时端口(Ephemeral Port)。如果短时间内创建大量连接,端口资源会被耗尽。
  • 触发场景
    • 高并发请求数据库且未复用连接(如未使用连接池)。
    • 代码中频繁创建/关闭数据库连接(如每次查询都开新连接)。
  • 验证方法
    # Linux/Mac: 查看TIME_WAIT状态的连接数
    netstat -an | grep :3306 | grep TIME_WAIT | wc -l# 查看系统可用端口范围
    sysctl net.ipv4.ip_local_port_range
    # 典型值:32768-60999(约2.8万个端口)
    
  • 解决方案
    • 使用连接池:确保复用数据库连接(推荐sql.DB自带连接池):
      db, _ := sql.Open("mysql", "user:pass@tcp(10.1.68.88:3306)/db")
      db.SetMaxOpenConns(100)  // 限制最大连接数
      db.SetMaxIdleConns(20)   // 保留空闲连接
      defer db.Close()
      
    • 扩大端口范围(临时缓解):
      sudo sysctl -w net.ipv4.ip_local_port_range="1024 65000"
      
    • 启用端口复用(Linux):
      sudo sysctl -w net.ipv4.tcp_tw_reuse=1
      

2. 网络配置问题

  • 路由/防火墙限制:本地网络策略阻止访问目标IP。
    • 检查防火墙规则:
      iptables -L -n  # Linux
      
  • 目标服务器限制
    • MySQL服务未运行:确认 10.1.68.88:3306 的MySQL服务已启动。
    • 服务器防火墙:确保目标服务器开放3306端口。
    • MySQL绑定地址:检查MySQL的 bind-address 配置(非 127.0.0.1)。

3. DNS或IP解析问题

  • 临时性DNS故障导致IP不可达。
    • 尝试直接使用IP连接(如代码中已是IP,跳过此步)。
    • 检查本地DNS配置:cat /etc/resolv.conf

4. 系统资源限制

  • 文件描述符不足:操作系统限制单个进程的TCP连接数。
    • 检查限制:ulimit -n
    • 临时提升:ulimit -n 65535

排查步骤总结:

  1. 优先检查连接池:确保代码中复用数据库连接(80%问题根源)。
  2. 验证网络连通性
    telnet 10.1.68.88 3306       # 测试端口
    ping 10.1.68.88              # 测试基础连通性
    
  3. 监控端口使用
    ss -s | grep "TCP:"         # 查看总TCP连接数
    netstat -ant | grep :3306   # 查看目标连接状态
    
  4. 检查系统日志
    dmesg | grep "TCP"          # 查看内核级网络错误
    

关键建议
在Go中务必使用 database/sql 的连接池(通过 sql.Open() + 配置参数),避免在循环/高频请求中重复 Open/Close 连接。连接池会自动管理连接的复用和生命周期,从根本上解决端口耗尽问题。

http://www.dtcms.com/a/265021.html

相关文章:

  • 中心化钱包安全方案
  • 跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议​​
  • Kotlin Data包含ByteArray类型
  • Dify 工作流全栈解析:从零构建你的 AI 应用流程引擎
  • 如何看待RWA赛道
  • 前端代码优化规范及实践指南
  • leetcode TOP 100 1. 两数之和
  • Centos系统及国产麒麟系统设置自己写的go服务的开机启动项完整教程
  • CentOS 6操作系统安装
  • win11, 两个窗口短时间多次切换时,原本的英文输入法会自动变更成中文输入法。有时候是中文输入法变更成英文输入法
  • 014_循环语句(for / for-each / while / do-while)
  • LeetCode 11.盛最多水的容器
  • Binder机制与实现原理解析
  • 达梦数据库一键安装脚本详解
  • 《P4145 上帝造题的七分钟 2 / 花神游历各国》
  • VSCode-Copilot的系统提示词
  • 云上配送革命:亚矩云手机如何重塑Uber Eats的全球外卖生态
  • Javaweb - 9 HTTP 协议
  • MAC 多应用切换技巧,单应用切换技巧
  • CentOS 卸载docker
  • [学习记录] HLSL-编译指示及属性
  • IPS防御原理和架构
  • Prompt Engineering Guide — 提示工程全方位指南
  • Kafka Controller 元数据解析与故障恢复实战指南
  • UI前端大数据处理策略优化:基于云计算的数据存储与计算
  • leetcode:416.分割等和子集【01背包】【动态规划】
  • 光照解耦和重照明
  • 接口测试用例设计
  • Shader Graph学习——屏幕uv采样
  • 智能学号抽取系统 V3.7.5 —— 一个基于 Vue.js 的交互式网页应用