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

树莓派连接PC端WAMP MySQL数据库时卡在connector.Connect的问题求助

解决树莓派连接PC端WAMP MySQL时卡在connector.Connect的问题

这种卡在连接函数且完全不触发异常的情况,大概率是网络层面的阻塞或者MySQL服务的访问限制导致的——毕竟你的代码连print('1')都没执行,说明程序还在一直等待连接响应,根本没走到错误处理那一步。我帮你梳理几个最常见的原因和对应的解决办法:

1. MySQL服务只绑定了本地回环IP

默认情况下,MySQL可能只允许本地(127.0.0.1)访问,局域网内的树莓派根本连不上PC的MySQL服务。你需要修改WAMP的MySQL配置:

  • 打开WAMP管理器,右键点击MySQL → 选择my.ini打开配置文件
  • 找到bind-address这一行,把它改成bind-address = 0.0.0.0(允许所有IP访问)或者直接写你的PC局域网IP192.168.0.104
  • 保存配置后,重启WAMP的MySQL服务(WAMP管理器里点击MySQL → 重启服务)

2. Windows防火墙拦截了3306端口

Windows默认防火墙会阻止外部设备访问本机的3306端口,树莓派的连接请求被防火墙挡在外面,程序就会一直等待超时(默认超时时间很长,所以看起来像是卡住了)。解决办法:

  • 打开Windows Defender防火墙高级设置
  • 新建一条入站规则:选择TCP协议,指定端口3306,允许来自局域网(比如192.168.0.0/24网段)的连接
  • 也可以先临时关闭防火墙测试,如果能正常连接了,就说明是防火墙的问题,再把规则配置好即可

3. MySQL用户的访问权限范围不对

你说已经给树莓派配置了用户权限,但很可能只给了localhost的访问权限,树莓派从局域网IP连接时会被拒绝(这种情况有时候不会立刻抛异常,而是导致连接超时)。你需要重新配置用户权限:

  • 在PC上打开WAMP的MySQL控制台,登录root用户
  • 执行以下SQL语句(替换成你的用户名和密码):
    GRANT ALL PRIVILEGES ON tempbase.* TO 'own_pi'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
    这里的%表示允许该用户从任何IP连接,如果你想更安全,可以把%换成树莓派的固定局域网IP

4. 树莓派端的网络连通性或驱动问题

先确认树莓派能正常访问PC:

  • 在树莓派的终端执行ping 192.168.0.104,看能不能收到回应,确保网络连通
  • 用telnet 192.168.0.104 3306测试端口,如果能连通会看到MySQL的欢迎信息,否则说明端口不通
  • 另外,也可能是mysql-connector版本太老导致的兼容性问题,执行pip install --upgrade mysql-connector-python更新驱动

优化代码辅助排查

你可以给连接函数加上超时参数,这样超过指定时间没连上就会抛出异常,不会一直卡住:

from mysql import connector
print('0')
try:
    # 添加10秒连接超时,避免无限等待
    con = connector.Connect(
        user='own_pi',
        password='password',
        database='tempbase',
        host='192.168.0.104',
        port=3306,
        connection_timeout=10
    )
except connector.Error as e:
    print("Error code:", e.errno)
    print("SQLSTATE value:", e.sqlstate)
    print("Error message:", e.msg)
    print("Error:", e)
except Exception as e:
    # 捕获其他意外异常,比如超时
    print("Unexpected error:", str(e))
print('1')
# 先判断连接是否成功再执行后续操作
if 'con' in locals() and con.is_connected():
    cur = con.cursor()
    print('2')
    cur.execute("INSERT INTO `sensor_readings` (`uid`, `local_id`, `type`, `date`, `reading`) VALUES ('7', '4', 'temperature', '2018-06-04', '24.4');")
    print('3')
    con.commit()
    print('4')
    con.close()
    print('5')
else:
    print("Connection failed, skip database operations")

内容的提问来源于stack exchange,提问作者Георги Няголов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:47