【问题标题】:Cloud Composer cannot connect to SQL Server database installed in Azure VMCloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库
【发布时间】:2022-01-22 22:02:31
【问题描述】:

我在 Azure VM 实例中安装了一个源 SQL Server 数据库,我想将数据同步到 Bigquery。我选择了 Apache Airflow 来创建一个 DAG 来完成这项工作。源系统只能通过 VPN 网络连接。

我将本地系统连接到网络并使用 Python 包 pymssql 来查询数据库。我能够连接到它并执行查询。我开发了一个 DAG 管道并在我的本地环境中对其进行了测试。现在我想在 GCP 作曲家环境中部署该 DAG 管道。

在创建 composer 环境之前,我已经成功地在 GCP 和 Azure 之间创建了一个 VPC 网络。为了确认连接成功,我创建了一个 VM 实例并远程登录到数据库 IP 以确保我们能够 ping 数据库服务器。从 VM 实例,我们能够 ping 数据库服务器。但是在同一网络中创建composer环境并部署DAG代码时,会抛出以下错误

Traceback (most recent call last):
  File "/home/airflow/gcs/dags/source.py", line 201, in <module>
    conn = pymssql.connect(server='x.x.x.x', user=<username>, password=<password>, database=<dbname>)
  File "src/pymssql/_pymssql.pyx", line 652, in pymssql._pymssql.connect
pymssql._pymssql.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (x.x.x.x)\nNet-Lib error during Connection timed out (110)\nDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (x.x.x.x)\nNet-Lib error during Connection timed out (110)\n')

以下是用到的库

  • pymssql == 2.2.2

过去几天遇到此错误。我知道网络配置应该存在问题,但无法找出该错误。任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: sql-server python-3.x azure google-cloud-composer


    【解决方案1】:

    我可以根据经验案例向您建议 3 种尝试解决此问题的方法:

    1.- 人们遇到类似问题的大多数情况都使用 TSQL(安装 freetds-bin)得到了解决。以下命令可以帮助您:

    sudo apt update
    sudo apt install python3-pip, freetds-dev, freetds-bin, libssl-dev
    

    请确保在 /etc/freetds/freetds.conf 中将“tds version = auto”更改为“tds version = 7.4”,通过:

    sudo nano /etc/freetds/freetds.conf
    

    修改为: [全球的] ... tds 版本 = 7.4 端口 = 1433

    要在 Cloud Composer 中运行 Airflow CLI 命令,请执行以下命令:

    gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    SUBCOMMAND \
    -- SUBCOMMAND_ARGUMENTS
    

    替换以下内容:

    -ENVIRONMENT_NAME 与环境的名称。

    -LOCATION 与环境所在的 Compute Engine 区域。

    -SUBCOMMAND 与支持的 Airflow CLI 命令之一。

    -SUBCOMMAND_ARGUMENTS 带有 Airflow CLI 命令的参数。

    2.- 确保已启用 Azure SQL Server 的 TCP/IP 访问。为此,请在 Azure 的 SQL Server 配置管理器中打开对 127.0.0.1:1433 的访问权限,例如:

    一个。开始\所有程序\Microsoft SQL Server 20XX\配置工具\SQL Server 配置管理器。

    b. SQL Server 网络配置\MSSQLSERVER 的协议。

    c。 TCP/IP\属性\IP 地址。找到 127.0.0.1 并将“已启用”更改为“是”。如果需要或需要,对所有 IP 重复此操作。

    3.- 最后,如果前面的步骤不起作用,请尝试使用不同的库,例如 pyodbc,通过:

    import pyodbc
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=SERVERNAME;DATABASE=testdb;UID=me;PWD=pass')
    cursor = cnxn.cursor()
    cursor.execute("select user_id, user_name from users")
    rows = cursor.fetchall()
    for row in rows:
        print row.user_id, row.user_name
    

    使用以下网址作为指导:Adaptive Server is unavailable or does not existpymssql.OperationalError: DB-Lib error message 20009Access Airflow command-line interface

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2021-05-12
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多