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
相关产品推荐
相关产品推荐

