You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SSH Tunnel连接MariaDB遇阻:本地/远程绑定地址混淆求助

解决树莓派间MariaDB远程连接问题的分步指南

我明白你现在的困惑——远程连接数据库时绑定地址和权限配置确实是新手容易踩的坑,咱们一步步把问题拆解清楚:

1. 先修正MariaDB的绑定地址配置

默认情况下,MariaDB只允许**本地回环地址(127.0.0.1)**访问,这就导致只有数据库所在的树莓派本身能连,其他设备哪怕在同一局域网也会被拒绝。你需要修改配置让它监听局域网IP:

  • 打开树莓派上的MariaDB配置文件:sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  • 找到 bind-address 这一行,把默认的 127.0.0.1 改成:
    • 如果你只想让特定设备访问,填数据库树莓派的局域网IP(比如 192.168.1.100
    • 想允许局域网内所有设备访问,就改成 0.0.0.0(仅限局域网内使用,避免暴露到公网)
  • 重启MariaDB生效:sudo systemctl restart mariadb

2. 给另一台树莓派配置数据库访问权限

你用PC的SQL Workbench能连上,大概率是这个数据库用户只授权了PC的IP访问,现在要给另一台树莓派开权限:

  • 在数据库所在树莓派上登录MariaDB:sudo mariadb -u root -p
  • 执行授权命令(替换成你的实际信息):
    -- 允许指定IP的设备访问指定数据库
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'另一台树莓派的局域网IP' IDENTIFIED BY '你的密码';
    
    -- 或者允许该用户从整个局域网段访问(比如192.168.1.x)
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'192.168.1.%' IDENTIFIED BY '你的密码';
    
  • 刷新权限让配置生效:FLUSH PRIVILEGES;
  • 退出MariaDB:EXIT;

3. 新手友好的Python连接代码(带参数注释)

给你写个清晰的示例,每个参数都标注了作用,避免再混淆本地/远程地址:

import mysql.connector

# 核心参数说明:
# host: 必须填数据库所在树莓派的**局域网IP**,不能写localhost(localhost是本地回环,远程设备用不了)
# user: 你在MariaDB中创建的合法用户名
# password: 对应用户的登录密码
# database: 你要操作的目标数据库名称
db_config = {
    "host": "192.168.1.XXX",  # 替换成你的数据库树莓派IP
    "user": "你的用户名",
    "password": "你的密码",
    "database": "你的数据库名"
}

try:
    # 建立数据库连接
    conn = mysql.connector.connect(**db_config)
    if conn.is_connected():
        print("成功连接到MariaDB服务器!")
        
        # 示例:插入一条测试数据(替换成你的业务逻辑)
        cursor = conn.cursor()
        insert_sql = "INSERT INTO 你的表名(字段1, 字段2) VALUES (%s, %s)"
        data = ("测试内容1", "测试内容2")
        cursor.execute(insert_sql, data)
        conn.commit()
        print(f"成功插入{cursor.rowcount}条数据")
        
        # 用完记得关闭资源
        cursor.close()
        conn.close()
except mysql.connector.Error as e:
    print(f"连接或操作出错: {e}")

4. 最后排查网络和防火墙问题

如果还是连不上,先确认基础网络是否通畅:

  • 在另一台树莓派上ping数据库树莓派的IP:ping 192.168.1.XXX,看能不能收到响应
  • 测试3306端口是否开放:telnet 192.168.1.XXX 3306(没装telnet的话先执行sudo apt install telnet
  • 检查数据库树莓派的防火墙,允许3306端口:sudo ufw allow 3306,然后重启防火墙:sudo ufw reload

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

火山引擎 最新活动