Cloud SlashDB VM 无法与 Azure SQL 数据库连接
Cloud SlashDB VM can't connect with Azure SQL DB
我按照说明 here 在 Azure 中设置了一个 SlashDB 实例。
我设置了一个 Azure 数据库,我可以使用服务器管理员帐户从 SSMS 访问它。数据库服务器防火墙似乎已正确连接到 SlashDB 服务器 vnet 子网的服务端点。
当我让 SlashDB 根据主机名和数据库名组成连接字符串时,出现此错误:
Couldn't load model bromach_dev due to OperationalError. (pyodbc.OperationalError) ('08001', u'[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/e3q8)
Connection Error (Default Connection String)
当我使用 Azure 门户中的 ODBC 连接字符串覆盖连接字符串时,我收到此错误:
Couldn't load model bromach_dev due to InterfaceError. (pyodbc.InterfaceError) ('IM002', u'[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/rvf5)
Connection Error (Azure Connection String)
在这种情况下,我使用的连接字符串是:
Driver={ODBC Driver 13 for SQL Server};Server=tcp:org-dev.database.windows.net,1433;Database=bromach_dev;Uid=serveradmin@org-dev;Pwd=****************;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;
想法?
如果您的 Azure SQL 数据库不是托管实例,则 SlashDB VM 无法连接到它。
并且请确保 Azure SQL 数据库服务器防火墙正确连接到 SlashDB 服务器 vnet 子网的服务端点。
关于SlashDB的说明也提供了两种解决连接失败的方案:
另外,我想你也许可以看看这篇link作为参考:Configure Azure VM to connect to an Azure SQL Database Managed Instance
希望对您有所帮助
为了让 SlashDB 连接,必须有一条从其虚拟机实例到 Azure SQL 服务器的开放 TCP/IP 路由(抱歉,如果我说的很明显)。
此外,SlashDB 实例上必须有一个有效的 DNS 解析器,以便它可以获取连接字符串中配置的数据库主机的 IP 地址。
DNS 修复 -- 不再需要 --
让我们从后者开始。新的SlashDB image有一个bug,这是由Azure的发布过程中的一个bug引起的https://github.com/Azure/WALinuxAgent/issues/1151。我们已经向市场发布了修正后的图像。以下解决方法不再需要:
- 使用您在启动实例时设置的凭据通过 SSH 登录到您的 SlashDB 实例。
发出以下命令
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
防火墙设置(简单) -- 从这里开始 --
使用 Azure 门户,导航到您的数据库资源并单击 "Set server firewall" 按钮。
检查"Allow access to Azure services"是否开启。在我们的测试中,一个 SlashDB 实例 运行 位于与数据库服务器相同的位置(在我们的例子中是美国东部),启用此设置后连接没有问题。
防火墙设置(更安全)
使用与上述相同的防火墙设置面板,关闭 "Allow access to Azure services"。相反,我们将为您的 SlashDB 实例添加一个网络路由以进行连接。最好使用虚拟网络规则,如下所示。
- 单击屏幕底部的 "Add existing virtual network" 按钮。侧面板将打开。
- 填写所需的详细信息,最重要的是您的 SlashDB 实例的虚拟网络名称(您可以在 Azure 门户的 "Overview" 页面中找到该名称)。单击“确定”。
- 命中"Save".
SlashDB 中的数据库连接
在浏览器中打开 SlashDB 用户界面,导航到 Configure/Databases 并单击数据库连接旁边的 "edit" 按钮。
无需重写连接字符串。您的数据库连接配置应如下所示:
完成后点击保存,然后点击关闭。您现在应该能够成功连接。
我按照说明 here 在 Azure 中设置了一个 SlashDB 实例。
我设置了一个 Azure 数据库,我可以使用服务器管理员帐户从 SSMS 访问它。数据库服务器防火墙似乎已正确连接到 SlashDB 服务器 vnet 子网的服务端点。
当我让 SlashDB 根据主机名和数据库名组成连接字符串时,出现此错误:
Couldn't load model bromach_dev due to OperationalError. (pyodbc.OperationalError) ('08001', u'[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/e3q8)
Connection Error (Default Connection String)
当我使用 Azure 门户中的 ODBC 连接字符串覆盖连接字符串时,我收到此错误:
Couldn't load model bromach_dev due to InterfaceError. (pyodbc.InterfaceError) ('IM002', u'[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/rvf5)
Connection Error (Azure Connection String)
在这种情况下,我使用的连接字符串是:
Driver={ODBC Driver 13 for SQL Server};Server=tcp:org-dev.database.windows.net,1433;Database=bromach_dev;Uid=serveradmin@org-dev;Pwd=****************;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;
想法?
如果您的 Azure SQL 数据库不是托管实例,则 SlashDB VM 无法连接到它。
并且请确保 Azure SQL 数据库服务器防火墙正确连接到 SlashDB 服务器 vnet 子网的服务端点。
关于SlashDB的说明也提供了两种解决连接失败的方案:
另外,我想你也许可以看看这篇link作为参考:Configure Azure VM to connect to an Azure SQL Database Managed Instance
希望对您有所帮助
为了让 SlashDB 连接,必须有一条从其虚拟机实例到 Azure SQL 服务器的开放 TCP/IP 路由(抱歉,如果我说的很明显)。
此外,SlashDB 实例上必须有一个有效的 DNS 解析器,以便它可以获取连接字符串中配置的数据库主机的 IP 地址。
DNS 修复 -- 不再需要 --
让我们从后者开始。新的SlashDB image有一个bug,这是由Azure的发布过程中的一个bug引起的https://github.com/Azure/WALinuxAgent/issues/1151。我们已经向市场发布了修正后的图像。以下解决方法不再需要:
- 使用您在启动实例时设置的凭据通过 SSH 登录到您的 SlashDB 实例。
发出以下命令
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
防火墙设置(简单) -- 从这里开始 --
使用 Azure 门户,导航到您的数据库资源并单击 "Set server firewall" 按钮。
检查"Allow access to Azure services"是否开启。在我们的测试中,一个 SlashDB 实例 运行 位于与数据库服务器相同的位置(在我们的例子中是美国东部),启用此设置后连接没有问题。
防火墙设置(更安全)
使用与上述相同的防火墙设置面板,关闭 "Allow access to Azure services"。相反,我们将为您的 SlashDB 实例添加一个网络路由以进行连接。最好使用虚拟网络规则,如下所示。
- 单击屏幕底部的 "Add existing virtual network" 按钮。侧面板将打开。
- 填写所需的详细信息,最重要的是您的 SlashDB 实例的虚拟网络名称(您可以在 Azure 门户的 "Overview" 页面中找到该名称)。单击“确定”。
- 命中"Save".
SlashDB 中的数据库连接
在浏览器中打开 SlashDB 用户界面,导航到 Configure/Databases 并单击数据库连接旁边的 "edit" 按钮。
无需重写连接字符串。您的数据库连接配置应如下所示:
完成后点击保存,然后点击关闭。您现在应该能够成功连接。