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

Azure Synapse Spark连接Azure MySQL服务器失败求助

解决方案:Azure Synapse Spark写入Azure MySQL通信链路失败问题

针对你遇到的Communications link failure错误,以下是逐一排查和解决步骤:

1. 修正JDBC URL格式错误

你的JDBC URL存在两处格式问题:

  • MySQL JDBC URL中指定数据库的正确方式是/${数据库名},而非database=${数据库名}参数
  • 参数分隔符应使用?(起始)和&(分隔),而非分号;

修正后的URL:

val jdbc_url = s"jdbc:mysql://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?encrypt=true&trustServerCertificate=false&hostNameInCertificate=*.database.windows.net&loginTimeout=60"

2. 修正写入代码的参数错误

方式二中的dbtable参数错误地填入了数据库名,应该指定要写入的表名(如"table"),而非数据库名(URL中已指定数据库)。修正后的方式二代码:

df.write.format("jdbc")
  .mode("append")
  .option("url", jdbc_url)
  .option("dbtable", "table") // 此处改为目标表名
  .option("user", jdbcUsername)
  .option("password", jdbcPassword)
  .option("driver", "com.mysql.cj.jdbc.Driver") // 显式指定驱动类
  .save()

方式一也建议添加驱动类指定:

connectionProperties.put("driver", "com.mysql.cj.jdbc.Driver")
spark.table("tabletemp").write.mode("append").jdbc(jdbc_url, "table", connectionProperties)

3. 验证Azure MySQL的网络访问配置

  • 登录Azure门户,进入你的MySQL服务器,在连接安全中:
    • 将Synapse工作区的出站IP地址添加到防火墙白名单
    • 开启允许Azure服务和资源访问此服务器选项(测试场景可用,生产环境建议限制IP)
  • 确认MySQL服务器的端口3306未被Synapse工作区的网络规则拦截

4. 确认用户名格式正确性

Azure MySQL的用户名必须包含服务器后缀,格式为${jdbcUsername}@${jdbcHostname},而非单独的用户名。例如你的服务器名为mysql-server-1,用户名应为admin@mysql-server-1。

5. 验证JDBC驱动版本兼容性

确保Synapse Spark环境使用的MySQL JDBC驱动版本为8.0.x(兼容Azure MySQL),若环境默认驱动版本较低,可通过Spark配置显式指定驱动依赖:

spark.conf.set("spark.jars.packages", "mysql:mysql-connector-java:8.0.33")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:50:19