Airflow配置元数据后端sql_alchemy_conn时出现Login timeout expired错误
问题场景
配置Airflow元数据后端时使用以下连接字符串:
sql_alchemy_conn = mssql+pyodbc://user:pass@[IP of SQL SERVER]:1433/[DB NAME]?driver=ODBC+Driver+17+for+SQL+Server
出现报错:
sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
已确认:用户名密码正确、其他Python项目可正常用pyodbc连接(排除防火墙问题)、驱动安装正确、密码无需要转义的特殊字符。
排查与解决步骤
调整连接字符串参数
显式添加超时延长和证书信任参数,避免因证书验证或超时阈值过短导致失败:sql_alchemy_conn = mssql+pyodbc://user:pass@[IP of SQL SERVER]:1433/[DB NAME]?driver=ODBC+Driver+17+for+SQL+Server&TrustServerCertificate=yes&login_timeout=30在Airflow运行环境中直接验证连接
切换到Airflow实际运行的环境(如虚拟环境、容器),执行以下测试脚本,确认环境本身能否正常连接:import pyodbc conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=[IP of SQL SERVER],1433;DATABASE=[DB NAME];UID=user;PWD=pass;TrustServerCertificate=yes') cursor = conn.cursor() cursor.execute("SELECT 1") print(cursor.fetchone()) conn.close()如果脚本也超时,说明Airflow环境存在隐性的网络或配置问题。
确认SQL Server的TCP/IP协议状态
检查SQL Server配置管理器中对应实例的SQL Server网络配置,确保TCP/IP协议已启用,且端口1433处于监听状态。改用DSN连接方式
在系统中配置指向目标SQL Server的DSN,然后修改Airflow连接字符串为:sql_alchemy_conn = mssql+pyodbc://user:pass@[DSN_NAME]规避手动拼接参数可能带来的格式错误。
内容的提问来源于stack exchange,提问作者Justin Slayton

