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

GCP Composer连接MySQL数据库失败(错误2003)求助

问题排查与解决方案

一、核心问题定位

错误(2003, "Can't connect to MySQL server on 'hostname:port' (110)")本质是TCP连接超时,优先解决网络连通性问题,再验证SSL配置有效性。

二、逐步排查步骤

1. 验证Composer到MySQL的网络通路

  • 登录Composer所属的GKE集群节点(通过GCP控制台或gcloud container clusters get-credentials命令),执行telnet测试连通性:
    telnet <mysql-hostname> <mysql-port>
    
    如果不通,说明网络层面存在阻断:
    • 检查MySQL实例的防火墙规则,确认已开放Composer环境VPC IP段对3306端口的访问权限
    • 若使用GCP Cloud SQL,确认已将Composer的VPC添加到Cloud SQL的授权网络列表,或启用了VPC peering
    • 若MySQL部署在私有网络,排查NAT网关、路由表是否配置正确

2. 修正Airflow MySQL连接的SSL配置

Composer存储桶的data目录会被挂载到worker节点的/home/airflow/gcs/data/路径,需确保extras中的证书路径为绝对路径,正确配置格式如下:

{
  "ssl": {
    "ca": "/home/airflow/gcs/data/ca.pem",
    "cert": "/home/airflow/gcs/data/client-cert.pem",
    "key": "/home/airflow/gcs/data/client-key.pem"
  }
}
  • 额外检查证书文件权限:确保上传时未设置过于严格的权限,Composer worker的airflow用户需拥有读取权限

3. 快速测试连接有效性

在Airflow UI的Admin > Connections页面,找到目标MySQL连接,点击Test按钮直接验证连通性,比触发DAG更高效定位问题。

三、替代方案

1. 使用Cloud SQL Proxy(针对GCP Cloud SQL)

配置Cloud SQL Proxy sidecar实现本地端口转发,无需手动管理SSL证书:

  • 在Composer环境的values.yaml中添加Cloud SQL Proxy配置(或通过GCP控制台编辑Composer环境)
  • Airflow连接的主机设为127.0.0.1,端口设为代理本地端口(默认3306),extras无需SSL相关配置

2. 自定义PythonOperator执行SQL

若SQLExecuteQueryOperator的SSL适配存在问题,改用PythonOperator手动构建连接:

from airflow.decorators import task
import mysql.connector
from mysql.connector.constants import ClientFlag

@task
def run_mysql_query():
    db_config = {
        'user': '<你的用户名>',
        'password': '<你的密码>',
        'host': '<MySQL主机名>',
        'database': '<目标schema>',
        'client_flags': [ClientFlag.SSL],
        'ssl_ca': '/home/airflow/gcs/data/ca.pem',
        'ssl_cert': '/home/airflow/gcs/data/client-cert.pem',
        'ssl_key': '/home/airflow/gcs/data/client-key.pem'
    }
    conn = mysql.connector.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute("SELECT 1;")
    result = cursor.fetchall()
    cursor.close()
    conn.close()
    return result

在DAG中直接调用该task即可执行SQL操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:17:42