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

树莓派Zero远程访问树莓派3B+上MySQL服务器报Cursor未连接错误

解决方案

1. 修正MySQL用户授权规则

你当前创建的用户仅允许从树莓派3B+本身的IP登录,需要调整为允许树莓派Zero的IP访问:
首先删除原有错误授权的用户:
DROP USER '<remote user>'@'<rpi3 ip>';
重新创建授权(替换尖括号内容为你实际的配置值):

create user '<remote user>'@'<树莓派Zero的实际IP>' identified by '<password>';
grant all privileges on <db>.home to '<remote user>'@'<树莓派Zero的实际IP>';
FLUSH PRIVILEGES;

如果不需要限制访问来源,也可以将IP替换为'%'允许所有IP访问,仅建议局域网环境下使用。

2. 修正代码参数错误

你的main函数调用存在2处语法错误,是触发报错的核心原因之一:

  • 字段名列表需要传入字符串,[temperature]中的temperature是未定义变量,应该改为['temperature']
  • write方法的values参数要求传入可迭代的序列(列表/元组),单个数值20会触发参数匹配错误,需要改为[20]或者(20,)

3. 添加连接保活逻辑

MySQL会主动断开闲置的长连接,导致游标失效,需要在执行SQL前检查连接状态,断开自动重连,修正后的完整代码如下:

import mysql.connector

class Writer:
      
    def __init__(self):
        self.host = '<rpi3 ip>'
        self.user = '<remote user>'
        self.password = '<password>'
        self.database = '<db>'
        self.con = None
        self.cur = None
        self._connect()

    def _connect(self):
        # 避免重复创建连接
        if self.con and self.con.is_connected():
            return
        self.con = mysql.connector.connect(
          host=self.host,
          user=self.user,
          password=self.password,
          database=self.database
        )
        self.cur = self.con.cursor()
    
    # 构建SQL查询命令字符串       
    def __build_string(self,table,names):
        v = ""
        s = ""
        for i in names:
            v = v + i + ","
            s = s + "%s,"
        v = v[:-1]
        s = s[:-1]
        return "INSERT INTO " + table + " (" + v + ") VALUES (" + s + ")"
    
    def write(self,table,names,values):
        # 执行前检查连接状态,断开自动重连
        if not self.con or not self.con.is_connected():
            self._connect()
        command_string = self.__build_string(table,names)
        self.cur.execute(command_string,tuple(values))
        self.con.commit()
        return

        
    def terminate_connection(self):
        if self.cur:
            self.cur.close()
        if self.con and self.con.is_connected():
            self.con.close()
        return

def main():
    sql = Writer()
    # 修正后的传参
    sql.write('home',['temperature'],[20])
    sql.terminate_connection()
    
if __name__ == "__main__":
    main()

4. 确认MySQL配置生效

你之前添加的bind-address = 0.0.0.0是正确配置,不要改回127.0.0.1,修改配置后需要重启MySQL服务让配置生效:
sudo systemctl restart mysql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:03