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

Ubuntu系统下Jupyter无法连接MySQL,提示1045权限拒绝错误

解决Jupyter连接MySQL权限拒绝(终端可正常访问)的问题

可能原因及对应解决方法

1. MySQL账号的host权限限制

终端连接MySQL默认使用Unix socket,匹配的是stedman@localhost账号;而Jupyter的MySQL连接器可能默认使用TCP/IP连接,匹配的是stedman@127.0.0.1账号——这两个在MySQL里是独立账号,权限不共享。

解决步骤:

  • 终端登录MySQL:mysql -u stedman -p
  • 查询当前账号的host列表:
    SELECT user, host FROM mysql.user WHERE user = 'stedman';
    
  • 如果结果里没有127.0.0.1,给该host授权:
    -- 替换your_database为实际数据库名,your_password为你的密码
    GRANT ALL PRIVILEGES ON your_database.* TO 'stedman'@'127.0.0.1' IDENTIFIED BY 'your_password';
    FLUSH PRIVILEGES;
    
  • 之后在Jupyter里把连接的host改成127.0.0.1重试。

2. 密码特殊字符转义错误

如果密码包含\、'、"这类特殊字符,终端输入时会自动处理,但Python字符串里需要手动转义,否则传递的密码和终端输入的不一致。

解决方法:

  • 使用Python原始字符串(加r前缀)包裹密码,示例:
    import mysql.connector
    cnx = mysql.connector.connect(
        user='stedman',
        password=r'my\special"password',  # 加r避免转义
        host='localhost',
        database='your_db'
    )
    

3. Jupyter与终端使用不同Python环境

Jupyter可能运行在和终端不同的虚拟环境中,导致连接器配置或版本有差异。

检查与解决:

  • 在Jupyter中运行以下代码查看当前Python路径:
    import sys
    print(sys.executable)
    
  • 终端运行which python对比路径,若不一致:
    • 切换到Jupyter对应的环境,重新安装连接器:pip install mysql-connector-python
    • 确保连接参数和终端测试的完全一致。

4. 指定Unix Socket路径强制匹配终端连接方式

不想修改账号权限的话,可直接在Jupyter连接参数里指定MySQL的socket文件路径,强制使用和终端一样的socket连接方式。

示例代码:

import mysql.connector
cnx = mysql.connector.connect(
    user='stedman',
    password='your_password',
    host='localhost',
    unix_socket='/var/run/mysqld/mysqld.sock',  # Ubuntu下MySQL默认socket路径,可通过`mysql_config --socket`查询实际路径
    database='your_db'
)

内容的提问来源于stack exchange,提问作者C. Sheku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:30