【问题标题】:How to set up an SSH connection to a MySQL database in Airflow?如何在 Airflow 中建立与 MySQL 数据库的 SSH 连接?
【发布时间】:2018-09-20 14:21:49
【问题描述】:

我正在尝试使用 SSH 连接来连接到数据库。但是,当我尝试添加连接时,我看不到允许我设置 SSH 连接的字段。我知道可以传递额外的参数,但不确定 Airflow 为我的用例接受哪些键值。

【问题讨论】:

  • 如果您打算在此连接中使用 MySQLOperatorMySQLHook,则不支持此连接。理想情况下,您只需运行一个 Airflow 工作程序,您尝试通过 ssh 连接或远程连接到 MySQL 实例。但如果你必须,有一个 SSHHook 和 SSHOperator 允许在远程主机上执行命令,这可能是你正在寻找的。​​span>
  • 当您说您正在尝试使用 SSH 连接到数据库时,您是什么意思?您只是想通过 SSH 连接到运行数据库的服务器还是使用 JDBC 等连接到数据库?
  • @SimonD,我想与 JDBC 建立连接,这与 DataGrip/MYSQL Workbench 的做法非常相似。之前阅读过,似乎气流目前不允许这样做,除非自从我问这个问题以来最近发生了变化。
  • @DanielHuang, @SimonD,有什么更新吗?不为远程MySQL 主机提供支持是一个巨大的缺点。建议的解决方法是什么?

标签: mysql ssh airflow apache-airflow


【解决方案1】:

Airflow 当前(本身)不允许 SSH 连接。使用气流的Extra 参数,您只能加密您的连接(顺便说一句,这是个好主意)。

因此,如果您对加密连接感兴趣,则需要在 Extra 字段中指定如下参数: "cert":"/path/to/certs/client-cert.pem", "key":"/path/to/certs/client-key.pem", "ca":"/path/to/certs/server-ca.pem"}

具体来说,如果你“挖掘”MySqlOperator,你会看到以下链:

此链接很好地解释了certkeyca 是什么以及应该在其中放入什么。


现在,如果这仍然不是您想要的,那么您需要“走出”气流。假设您已经可以 ssh 到您的服务器 (ssh username@your-host),那么在单独的终端窗口(或背景)中,您应该使用以下命令启动转发:ssh -L <bind_address>:127.0.0.1:<host_port> username@your-host where:

  • <bind_address> 是您本地连接 Airflow 的端口
  • <host_port> 是远程主机数据库监听的端口(所以对于 mysql,它是 3306

当您的转发到位后,您可以使用 Airflow 的 Connections 设置并指定将使用 localhost 作为您的 Host<bind_address> 作为 Port 的连接。

示例:假设您的远程数据库在端口 3306 上进行侦听,并且工作 ssh 连接是 ssh me@my-host。您的转发命令应该是例如ssh -L 9876:127.0.0.1:3306 和 Airflow 的设置:

  • Host: localhost
  • Port: 9876
  • 所有其他连接设置类似于连接到本地主机上的 mysql 数据库

请记住,您的转发会话必须始终“开启”,否则连接将中断。把它放在后台就行了。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2016-07-08
    • 2011-01-26
    相关资源
    最近更新 更多