使用Airflow MySqlOperator连接MySQL时出现主机名不符的权限错误
解决Airflow MySqlOperator连接MySQL的1045权限错误及主机名不一致问题
先明确三个主机名的含义
hostname1:是Airflow调度器/工作节点所在机器的主机名(或IP),MySQL从这个地址收到连接请求,因此报错中显示该主机。hostname2:你在Airflow Admin->Connection中配置的MySQL服务器地址,是Airflow尝试连接的目标主机。USER()与CURRENT_USER()的差异:USER()返回的是你发起MySQL连接时的客户端主机,CURRENT_USER()是MySQL权限系统实际匹配到的账户主机(比如可能是通配符%、特定IP段等)。
调试修复步骤
验证Airflow Connection的实际配置
- 用Airflow CLI命令查看连接的真实配置:
airflow connections get <你的连接ID>,确认返回的主机地址是否为hostname2,避免存在未保存的配置或同名连接冲突。 - 若使用CeleryExecutor,检查Worker节点的配置是否同步,防止Worker使用旧的连接配置。
- 用Airflow CLI命令查看连接的真实配置:
排查MySQL权限规则
- 查询当前用户的权限记录:执行
SELECT user, host FROM mysql.user WHERE user = 'username';,查看该用户对应的允许访问主机列表。 - 给Airflow所在的
hostname1(或其IP)授权:如果权限列表中没有该主机,执行GRANT ALL PRIVILEGES ON <你的数据库名>.* TO 'username'@'hostname1' IDENTIFIED BY '你的密码';,再执行FLUSH PRIVILEGES;刷新权限。 - 核对密码一致性:确保Airflow Connection中配置的密码,与MySQL中
username@对应主机的密码完全一致。
- 查询当前用户的权限记录:执行
直接测试Airflow执行环境的连接
- 在Airflow调度器/Worker所在机器上,用命令行测试连接:
mysql -u username -p -h hostname2,如果同样报错1045,说明问题出在MySQL权限或密码,与Airflow本身无关;如果能成功连接,再检查MySqlOperator是否正确指定了Connection ID。
- 在Airflow调度器/Worker所在机器上,用命令行测试连接:
排查DNS解析问题
- 在Airflow机器上执行
ping hostname2,查看解析出的IP地址,确认该IP对应的主机名是否为hostname1。若解析结果不符合预期,需要调整DNS配置,或直接在Airflow Connection中使用MySQL服务器的IP地址替代主机名。
- 在Airflow机器上执行
内容的提问来源于stack exchange,提问作者Aragon
相关产品推荐
相关产品推荐

