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

ESP32直连局域网MySQL报Connection reset by peer错误求助

ESP32直连局域网MySQL报Connection reset by peer(errno:104)排查方案

报错核心原因是TCP三次握手阶段或刚完成时,MySQL所在服务器主动发送RST包重置了连接,和ESP32的WiFi是否连接成功无直接关联,按以下顺序排查即可:

一、先修正代码里的显性错误

  • 全局作用域缺失WiFiClient实例定义:现有代码直接取client的地址传给MySQL连接构造函数,但未提前声明WiFiClient client;,会出现野指针调用,触发随机socket错误。
  • WiFi配置顺序颠倒:现有代码先调用WiFi.begin()再调用WiFi.config(),ESP32 Arduino核心下这个顺序会导致静态IP配置不生效,设备实际拿到的DHCP地址和预期不符,被服务端防火墙拦截时就会返回连接重置。
  • 主机名配置逻辑错误:注释掉的域名分支里写的192.168.0.88/phpmyadmin/是phpMyAdmin的Web访问路径,MySQL是独立的TCP服务,连接时只需要纯IP/域名,不需要带任何HTTP路径。

二、服务端侧排查(90%同类报错根因在此)

先拿和ESP32同局域网的电脑执行telnet 192.168.0.88 3306,如果telnet都连不上,逐一排查以下配置:

  • MySQL服务监听地址配置错误:默认安装的MySQL仅绑定127.0.0.1回环地址,不响应局域网其他设备的连接请求,需要修改MySQL配置文件(Linux下为my.cnf,Windows下为my.ini)中的bind-address参数为0.0.0.0,保存后重启MySQL服务。
  • 防火墙/端口映射问题:检查服务器系统防火墙(Windows Defender防火墙、ufw、firewalld)是否放开3306端口的局域网入站规则;如果是Docker、NAS部署的MySQL,确认已经将容器的3306端口映射到宿主机的局域网IP上。
  • MySQL账号权限配置错误:
    • 账号默认仅允许本机登录,需要给ESP32使用的账号开放局域网段访问权限,执行对应SQL授权:
      -- 替换为实际使用的账号、密码、数据库名、网段
      CREATE USER 'esp32'@'192.168.0.%' IDENTIFIED BY '你的密码';
      GRANT ALL PRIVILEGES ON 目标库名.* TO 'esp32'@'192.168.0.%';
      FLUSH PRIVILEGES;
      
    • MySQL 8.0及以上版本默认使用caching_sha2_password认证插件,目前所有ESP32端的MySQL连接库都不支持该认证方式,创建账号时必须指定使用旧版mysql_native_password认证:
      CREATE USER 'esp32'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY '你的密码';
      
  • 临时关闭MySQL的强制SSL配置:部分默认配置会拦截未携带SSL握手包的客户端连接,直接返回RST重置连接,可以在配置文件中添加skip_ssl参数重启后测试。

三、ESP32侧验证步骤

  • 修正代码基础问题后,先跳过MySQL库,直接用WiFiClient测试纯TCP连通性,排除库本身的bug:
    // 测试用代码,放在WiFi连接成功后执行
    WiFiClient testClient;
    if (testClient.connect(server, 3306)) {
      Serial.println("TCP连接成功,服务端返回握手信息:");
      while (testClient.available()) {
        Serial.write(testClient.read());
      }
      testClient.stop();
    } else {
      Serial.printf("TCP连接失败,错误码:%d\n", testClient.getWriteError());
    }
    
    如果这一步连接失败,问题和MySQL库无关,继续排查网络、防火墙、端口配置;如果这一步能连接成功,且能读到返回的MySQL版本号信息,再检查账号权限、认证插件配置,同时可以将MySQL_Generic库回退到1.7.2稳定版,部分beta版本存在ESP32 socket封装bug,会触发连接重置。
  • 连接测试阶段不要加过长的休眠逻辑,每次连接失败后先等待2秒再重试,避免短时间频繁触发MySQL的连接拦截规则。

内容的提问来源于stack exchange,提问作者Rafael Freese Guerreiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:31:42