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

Azure Databricks Python连接外部MySQL部分驱动报错原因咨询

Azure Databricks连接外部MySQL问题排查

问题场景

  • 从Azure Databricks环境连接外部私有MySQL数据库时,使用pymysql、SQLAlchemy编写连接代码均返回1045访问拒绝错误,使用mysql.connector可正常连接。
  • pymysql连接代码示例:
conn = pymysql.connect(
    host='.....',
    user='.....', 
    password = "....",
    db='....')
cur = conn.cursor()
  • SQLAlchemy连接代码示例:
engine = create_engine("mysql+pymysql://{0}:{1}@hostname:3306/database".format('user','password'))
connection = engine.connect()
  • 两类代码统一报错:
OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'user'@'IP_address' (using password: YES)")

前置说明:目标外部数据库已开启远程访问,Databricks访问出口IP已加入数据库白名单。

  • 正常可用的mysql.connector代码示例:
connection = connect(
  host=dbutils.secrets.get(scope="resource_group", key="key"),
  port=dbutils.secrets.get(scope="resource_group", key="key"),
  user=dbutils.secrets.get(scope="resource_group", key="key"),
  password=dbutils.secrets.get(scope="resource_group", key="key"),
  database="db")
cursor = connection.cursor()

相同网络与账号配置下,SQLAlchemy和pymysql连接失败的原因

按出现概率从高到低排序,核心原因有三类:

  • 认证插件兼容性问题:MySQL 8.0及以上版本默认使用caching_sha2_password作为用户认证插件,Azure Databricks各Runtime版本预装的pymysql大多为1.0以下的旧版本,这类版本原生不支持caching_sha2_password认证逻辑,仅兼容旧版mysql_native_password插件,认证阶段会直接被服务端拒绝,抛出1045错误。而Oracle官方维护的mysql.connector-python从8.0.11版本开始就完整适配caching_sha2_password认证流程,和MySQL 8.x服务端完全兼容,因此可以正常连接。
  • 凭据传递错误:正常可用的连接逻辑通过dbutils.secrets读取密钥,不存在硬编码问题。如果pymysql、SQLAlchemy代码中硬编码凭据,一旦密码包含@、:、/、?这类URL保留字符,SQLAlchemy会将这些字符识别为连接串分隔符,导致实际传递给数据库的用户名、密码解析错误;如果pymysql直连时手动填写的凭据存在前后空格、取值错误,也会触发相同的1045报错。
  • SSL连接要求不匹配:多数生产环境私有MySQL会强制要求客户端通过SSL建立连接,旧版pymysql默认关闭SSL协商,不会携带SSL连接参数,会直接被服务端拒绝认证;而mysql.connector默认自动尝试SSL协商,符合服务端安全要求,因此可以通过认证。

Azure Databricks是否仅支持特定Python SQL连接器及相关限制原因

Azure Databricks没有官方强制要求必须使用特定Python SQL连接器,理论上只要是纯Python实现、可在Databricks Runtime的Python环境中正常安装、符合数据库通信协议的连接器都可以使用。
实际使用中出现部分连接器可用、部分不可用的核心原因有三点:

  • 预装版本兼容性差异:Databricks Runtime会预装部分常用连接器(包括mysql.connector、pyodbc、psycopg2等),预装版本均经过兼容性验证,适配Runtime内置的OpenSSL、Python小版本环境;用户自行安装的pymysql等第三方库如果版本过低,和Runtime底层依赖不兼容,就会出现连接失败。
  • 云网络环境适配差异:Databricks集群出口流量经过NAT网关转发,部分维护不活跃的旧版连接器在NAT环境下处理TCP握手、SSL协商时存在已知bug,会导致连接被拦截;而官方维护的主流连接器对云环境、NAT场景的适配更完善,不容易出现这类问题。
  • 安全策略适配差异:Databricks集群默认拦截使用TLS1.0/1.1等过时加密协议的出网流量,部分旧版连接器默认使用低版本加密协议,会被集群侧直接拦截;经过兼容性验证的连接器默认使用TLS1.2及以上的符合安全要求的协议,可正常发起连接。

内容的提问来源于stack exchange,提问作者Data Analytics CSMAG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:51:27