使用Dataflow Runner运行Apache Beam Python批处理任务时MySQL连接失败
问题分析与解决
核心问题:Direct Runner在本地执行,能访问你本机的MySQL;但Dataflow Runner的Worker运行在GCP云虚拟机上,这些Worker的127.0.0.1指向自身虚拟机,而非你的本地机器,自然无法连接到本地MySQL服务。
解决方案
- 修正MySQL连接地址:将连接配置中的
host从127.0.0.1/localhost替换为:- 若MySQL部署在GCP同VPC的云服务器/Cloud SQL,使用VPC内部IP;
- 若MySQL在本地,需先将其暴露到公网(不推荐生产环境),使用你的公网IP,或通过Cloud VPN/Cloud Interconnect打通本地与GCP VPC的网络。
- 配置防火墙/安全组:确保MySQL所在机器的防火墙、GCP VPC安全组允许Dataflow Worker的IP段访问MySQL默认端口(通常为3306)。如果使用Cloud SQL,需在实例配置中添加Dataflow Worker的服务账号或允许对应IP访问。
- 检查连接配置细节:确认beam-mysql连接器的
port、username、password配置正确,错误日志中的随机端口是连接失败时的临时端口,不是MySQL的实际服务端口。 - 优先使用托管服务:生产环境建议将MySQL迁移到Cloud SQL,它能与Dataflow无缝集成,无需手动配置复杂的网络规则。
关键错误日志
mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:41849' (111) beam_mysql.connector.errors.MySQLClientError: Failed to connect mysql, Raise exception: 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:36247' (111)
内容的提问来源于stack exchange,提问作者Sean Onyo
相关产品推荐
相关产品推荐

