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

Node.js连接MySQL报listen EADDRINUSE 3306端口占用错误求助

根因说明

Error: listen EADDRINUSE: address already in use :::3306 不是MySQL连接异常,是Node.js应用自身尝试绑定监听3306端口时,发现该端口已经被本地MySQL服务占用抛出的端口冲突错误。你之前改MySQL端口、换数据库实例都无效,核心原因是问题根本不出在数据库连接环节,你的Node应用甚至还没执行到连接数据库的逻辑,就因为自身端口绑定失败启动中断了。

修复步骤
  • 全局检索项目中所有调用.listen()方法的代码,重点检查端口传参:绝大多数情况是接入AWS Elastic Beanstalk时,混淆了Web服务监听端口和数据库连接端口的配置,把数据库端口(3306)传给了Web服务的监听方法。
    典型错误写法示例:
    // 错误:将数据库端口作为Web服务监听端口使用
    const SERVICE_PORT = process.env.DB_PORT || 3000
    app.listen(SERVICE_PORT)
    
    正确逻辑是Web服务单独监听未被占用的端口(如3000、8080),数据库连接配置中单独传入3306作为数据库连接端口,两个配置项完全独立,不能混用。
  • 清理本地残留配置:检查项目根目录下的.env文件、.elasticbeanstalk目录下的配置文件,确认是否存在将PORT变量(Elastic Beanstalk默认读取该变量作为Web服务监听端口)设置为3306的配置,这类本地残留配置不会随你删除云端AWS资源自动清除。

快速验证方法:临时注释掉项目中所有数据库连接相关代码,只保留Web服务启动逻辑,如果启动时仍然报3306端口占用,可100%确认是监听端口配置错误,和数据库本身无关。

  • 清理残留进程:修复配置后,先杀掉所有后台残留的Node进程,避免旧进程持续占用端口:
    Windows环境执行命令:
    taskkill /f /im node.exe
    
    Mac/Linux环境执行命令:
    pkill -f node
    
  • 按顺序重启本地MySQL服务、Node应用即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:21:46