当前位置: 首页 > 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.lryc.cn/news/579272.html

相关文章:

  • Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
  • 深度剖析NumPy核心函数reshape()
  • 使用Scapy构造OSPF交互报文欺骗网络设备与主机建立Full关系
  • Python 高光谱分析工具(PyHAT)
  • 【Linux】不小心又创建了一个root权限账户,怎么将它删除?!
  • 数据结构与算法:贪心(二)
  • Docker Compose 基础——AI教你学Docker
  • 鸿蒙UI框架深度解析:对比Android/iOS的布局适配与组件设计
  • 优雅草蜻蜓T语音会议系统私有化部署方案与RTC技术深度解析-优雅草卓伊凡|clam
  • 【字节跳动】数据挖掘面试题0002:从转发数据中求原视频用户以及转发的最长深度和二叉排序树指定值
  • gin框架 中间件 是在判断路由存在前执行还是存在后执行的研究
  • 人工智能-基础篇-14-知识库和知识图谱介绍(知识库是基石、知识图谱是增强语义理解的知识库、结构化数据和非结构化数据区分)
  • ubentu服务器版本安装Dify
  • docker拉取redis并使用
  • 代码训练LeetCode(44)螺旋矩阵
  • Notion 创始人 Ivan Zhao:传统软件开发是造桥,AI 开发更像酿酒,提供环境让 AI 自行发展
  • Highcharts 安装使用教程
  • 数据结构20250620_数据结构考试
  • mysql查看数据库
  • IPS防御原理和架构
  • MySQL 用户管理与权限控制
  • Python 的内置函数 print
  • vue动态绑定样式
  • 利用tcp转发搭建私有云笔记
  • (第三篇)HMTL+CSS+JS-新手小白循序渐进案例入门
  • Spring Cloud 微服务(链路追踪与日志聚合)
  • Springboot开发常见注解一览
  • Rust 安装使用教程
  • 【数字后端】- 什么是AOI、OAI cell?它们后面数字的含义
  • 无代码自动化测试工具介绍