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

Python mariadb模块无法连接局域网内MariaDB数据库求助

Python mariadb模块连接局域网MariaDB失败解决方案

问题描述

使用Python的mariadb模块连接局域网内MariaDB数据库时触发OperationalError: Can't connect to server on '192.168.178.77' (60)错误,但PyCharm数据库工具、本地数据库管理软件及手机均能正常连接目标数据库,操作系统为MacOS13.0.1。

代码示例

import mariadb

cursor = mariadb.connect(host='192.168.178.77', user='someuser', password='somepass', db='temps')

报错信息

Traceback (most recent call last):
  File "/Users/localuser/PycharmProjects/SQL/main.py", line 20, in <module>
    cursor = mariadb.connect(host='192.168.178.77', user='someuser', password='somepass', db='temps')
  File "/Users/user/.conda/envs/SQL/lib/python3.10/site-packages/mariadb/__init__.py", line 142, in connect
    connection = connectionclass(*args, **kwargs)
  File "/Users/localuser/PycharmProjects/SQL/lib/python3.10/site-packages/mariadb/connections.py", line 86, in __init__
    super().__init__(*args, **kwargs)
mariadb.OperationalError: Can't connect to server on '192.168.178.77' (60)

排查与解决步骤

  • 更新conda环境内的mariadb依赖:你使用的是conda虚拟环境,可能环境内的mariadb-python包版本存在兼容性问题。执行以下命令更新:
    pip install --upgrade mariadb
    # 或使用conda源安装
    conda install -c conda-forge mariadb-python
    
  • 显式指定数据库端口:默认MariaDB端口为3306,虽然其他工具能自动识别,但代码中显式指定端口可避免潜在的端口匹配问题:
    import mariadb
    
    conn = mariadb.connect(
        host='192.168.178.77',
        port=3306,
        user='someuser',
        password='somepass',
        db='temps'
    )
    cursor = conn.cursor()
    
  • 检查MacOS防火墙权限:确认conda环境的Python进程被允许联网。打开「系统设置」→「网络」→「防火墙」,找到路径为/Users/user/.conda/envs/SQL/bin/python的进程,确保其联网权限已开启。
  • 验证数据库用户连接权限:确保someuser用户允许从你的Mac局域网IP地址连接。登录目标数据库执行以下SQL:
    -- 查看用户允许的连接IP
    SELECT host FROM mysql.user WHERE user='someuser';
    -- 如果未包含你的MacIP,添加权限
    GRANT ALL PRIVILEGES ON temps.* TO 'someuser'@'你的Mac局域网IP' IDENTIFIED BY 'somepass';
    FLUSH PRIVILEGES;
    
  • 强制使用TCP协议连接:部分情况下,mariadb模块可能默认尝试套接字连接,显式指定TCP协议可解决该问题:
    conn = mariadb.connect(
        host='192.168.178.77',
        protocol='tcp',
        user='someuser',
        password='somepass',
        db='temps'
    )
    cursor = conn.cursor()
    

内容的提问来源于stack exchange,提问作者Husky-CGN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:40:11