MySQLdb._exceptions.OperationalError: (2002, "Can't connect to server on '<servername>.database.windows.net') | Django+Azure+MySql
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to server on '<servername>.database.windows.net') | Django+Azure+MySql
我在将本地计算机中的 Django 应用程序连接到 Azure 中的 MySql 数据库时遇到问题?我在规则中添加了我的 IP 并正在连接:
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<servername>.database.windows.net',
'PORT': '3306',
'NAME': '<database_name>',
'USER': '<admin>@<servername>',
'PASSWORD': '<cecret>',
'OPTIONS': {'ssl': {'pem': 'tls.pem'} }
},
我可以使用 AzureDataStudio 进行连接,但不能使用 django 中的此配置。我 Nmaped 我的主机,发现了一堆开放端口,但是 3306
和 1433
绑定到 Sql 服务器。
Django 的 runserver
使用此配置显示 MySQLdb._exceptions.OperationalError: (2002, "Can't connect to server on '<servername>.database.windows.net' (115)")
即使我在其中包含该服务器和数据库 运行.
Azure 门户中的一个示例 php
查询字符串有:
$conn = new PDO("sqlsrv:server = tcp:<server_name>.database.windows.net,1433; Database = <database_name>", "<admin>", "{your_password_here}");
所以,我假设我应该连接到 1433
,但只有 3306
从 DataStudio 工作。从 python manage.py runserver
如果我尝试端口 1433
,它会显示 django.db.utils.OperationalError: (2013, "Lost connection to server at 'handshake: reading initial communication packet', system error: 104")
。我对此知识有限。
Correction-1:3306
似乎不适用于 Azure DataStudio。但是在 Django 设置中使用 1433
甚至不会初始化连接。
您需要在本地计算机上安装 MySQL 连接器,以便使用以下命令将 Python 与 MySQL 的 Azure 数据库连接起来。
pip install mysql-connector-python
稍后,在服务器的概览页面上,记下服务器名称和服务器管理员登录名。
将代码示例添加到文件中。在代码中,将 <mydemoserver>
、<myadmin>
、<mypassword>
和 <mydatabase>
占位符替换为 MySQL 服务器和数据库的值。
注意: Azure 数据库默认为 MySQL 服务器启用 SSL。您可能需要下载 DigiCertGlobalRootG2 SSL certificate 才能从您的本地环境进行连接。 用您计算机上此文件的路径替换代码中的 ssl_ca
值。
import mysql.connector
from mysql.connector import errorcode
# Obtain connection string information from the portal
config = {
'host':'<mydemoserver>.mysql.database.azure.com',
'user':'<myadmin>@<mydemoserver>',
'password':'<mypassword>',
'database':'<mydatabase>',
'client_flags': [mysql.connector.ClientFlag.SSL],
'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}
# Construct connection string
try:
conn = mysql.connector.connect(**config)
print("Connection established")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with the user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cursor = conn.cursor()
# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed).")
# Create table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table.")
# Insert some data into table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
print("Inserted",cursor.rowcount,"row(s) of data.")
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
print("Inserted",cursor.rowcount,"row(s) of data.")
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted",cursor.rowcount,"row(s) of data.")
# Cleanup
conn.commit()
cursor.close()
conn.close()
print("Done.")
参考this official tutorial中给出的步骤进行部署。
显然我使用的连接字符串和后端不支持我使用的“MySql 数据库”。我仍然不清楚它是如何工作的,但现在就开始了。
我创建了一个新的 Azure Database for MySql servers
并在那里创建了一个新的数据库。然后在我原来的 Django 的 DATABASE={}
条目中使用 @UtkarshPal-MT 提供的连接字符串。不必做任何其他事情。它刚刚连接。
注意:您确实强制要求通过该证书。
Edit1:如果你像我一样使用它。
然后您需要使用 this mssql-django 具有适当驱动程序的外部后端。您可以在该 PyPi 页面中找到有关使用此后端的详细信息。
我在将本地计算机中的 Django 应用程序连接到 Azure 中的 MySql 数据库时遇到问题?我在规则中添加了我的 IP 并正在连接:
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<servername>.database.windows.net',
'PORT': '3306',
'NAME': '<database_name>',
'USER': '<admin>@<servername>',
'PASSWORD': '<cecret>',
'OPTIONS': {'ssl': {'pem': 'tls.pem'} }
},
我可以使用 AzureDataStudio 进行连接,但不能使用 django 中的此配置。我 Nmaped 我的主机,发现了一堆开放端口,但是 3306
和 1433
绑定到 Sql 服务器。
Django 的 runserver
使用此配置显示 MySQLdb._exceptions.OperationalError: (2002, "Can't connect to server on '<servername>.database.windows.net' (115)")
即使我在其中包含该服务器和数据库 运行.
Azure 门户中的一个示例 php
查询字符串有:
$conn = new PDO("sqlsrv:server = tcp:<server_name>.database.windows.net,1433; Database = <database_name>", "<admin>", "{your_password_here}");
所以,我假设我应该连接到 1433
,但只有 3306
从 DataStudio 工作。从 python manage.py runserver
如果我尝试端口 1433
,它会显示 django.db.utils.OperationalError: (2013, "Lost connection to server at 'handshake: reading initial communication packet', system error: 104")
。我对此知识有限。
Correction-1:3306
似乎不适用于 Azure DataStudio。但是在 Django 设置中使用 1433
甚至不会初始化连接。
您需要在本地计算机上安装 MySQL 连接器,以便使用以下命令将 Python 与 MySQL 的 Azure 数据库连接起来。
pip install mysql-connector-python
稍后,在服务器的概览页面上,记下服务器名称和服务器管理员登录名。
将代码示例添加到文件中。在代码中,将 <mydemoserver>
、<myadmin>
、<mypassword>
和 <mydatabase>
占位符替换为 MySQL 服务器和数据库的值。
注意: Azure 数据库默认为 MySQL 服务器启用 SSL。您可能需要下载 DigiCertGlobalRootG2 SSL certificate 才能从您的本地环境进行连接。 用您计算机上此文件的路径替换代码中的 ssl_ca
值。
import mysql.connector
from mysql.connector import errorcode
# Obtain connection string information from the portal
config = {
'host':'<mydemoserver>.mysql.database.azure.com',
'user':'<myadmin>@<mydemoserver>',
'password':'<mypassword>',
'database':'<mydatabase>',
'client_flags': [mysql.connector.ClientFlag.SSL],
'ssl_ca': '<path-to-SSL-cert>/DigiCertGlobalRootG2.crt.pem'
}
# Construct connection string
try:
conn = mysql.connector.connect(**config)
print("Connection established")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with the user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
cursor = conn.cursor()
# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed).")
# Create table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table.")
# Insert some data into table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
print("Inserted",cursor.rowcount,"row(s) of data.")
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
print("Inserted",cursor.rowcount,"row(s) of data.")
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted",cursor.rowcount,"row(s) of data.")
# Cleanup
conn.commit()
cursor.close()
conn.close()
print("Done.")
参考this official tutorial中给出的步骤进行部署。
显然我使用的连接字符串和后端不支持我使用的“MySql 数据库”。我仍然不清楚它是如何工作的,但现在就开始了。
我创建了一个新的 Azure Database for MySql servers
并在那里创建了一个新的数据库。然后在我原来的 Django 的 DATABASE={}
条目中使用 @UtkarshPal-MT 提供的连接字符串。不必做任何其他事情。它刚刚连接。
注意:您确实强制要求通过该证书。
Edit1:如果你像我一样使用它。
然后您需要使用 this mssql-django 具有适当驱动程序的外部后端。您可以在该 PyPi 页面中找到有关使用此后端的详细信息。