Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库
Posted
技术标签:
【中文标题】Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库【英文标题】:Cloud Composer cannot connect to SQL Server database installed in Azure VM 【发布时间】:2022-01-22 22:02:31 【问题描述】:我在 Azure VM 实例中安装了一个源 SQL Server 数据库,我想将数据同步到 Bigquery。我选择了 Apache Airflow 来创建一个 DAG 来完成这项工作。源系统只能通过 *** 网络连接。
我将本地系统连接到网络并使用 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过去几天遇到此错误。我知道网络配置应该存在问题,但无法找出该错误。任何帮助表示赞赏。谢谢!
【问题讨论】:
【参考方案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 exist、pymssql.OperationalError: DB-Lib error message 20009 和 Access Airflow command-line interface。
【讨论】:
以上是关于Cloud Composer 无法连接到安装在 Azure VM 中的 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如果不在防火墙或代理之后,Composer 将无法通过 http 连接到 packagegist 的一些原因是啥?
Vagrant box add - 无法连接到cloud-images.ubuntu.com端口443:超时
无法在 Google Cloud Composer 上安装新的 pipy 包
如何使用App Engine上的Python标准环境连接到Cloud SQL上的Postgres