我有一个Django版本(1.10)安装在我的MacBookPro(El Capitan OS X)上,我想将API连接到位于远程服务器上的MySQL数据库(Ubuntu - 与我的工作相同的网络网络)。
我在运行Django服务器时遇到此错误:
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '172.30.10.58' (61)")
这是我项目中的settings.py
文件:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Etat_Civil',
'USER': 'root',
'PASSWORD': 'password',
'HOST': '172.30.10.58',
'PORT': '3306',
}
}
在我的Mac上,我安装了mysqlclient
/ mysql connector/python
我不能使用虚拟环境,因为我的笔记本电脑中只有一个项目。因此,没有必要隔离Python。
我认为这可能是一个许可问题,但我真的不知道如何配置。我找到了一些教程但每次都遇到问题。
你有什么想法吗?
非常感谢你;)
答案 0 :(得分:2)
看起来MySQL配置为仅在localhost上侦听。
您可以通过从客户端计算机运行telnet 172.30.10.59 3306来测试。
请尝试按照here:
所述的配置步骤进行操作编辑/etc/mysql/my.cnf文件以配置MySQL以侦听来自网络主机的连接,将bind-address指令更改为服务器的IP地址。例如,将172.30.10.59替换为适当的地址。如果没有这样的条目 - 取消注释或创建新行。
bind-address = 172.30.10.59
然后使用以下命令重启mysqld:
sudo service mysql restart
然后使用telnet或再次运行您的应用程序进行测试。 netstat也会为mysqld提供第二个条目。
答案 1 :(得分:2)
首先,您需要通过编辑my.cnf
文件并注释以bind-address
开头的行来允许远程连接,如下所示(您也可以通过机器IP地址更改127.0.0.1
) :
#bind-address = 127.0.0.1
然后重启mysql服务:
sudo service mysql restart
为用户授予权限,如下所示:
mysql> CREATE USER 'root'@'172.30.10.%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.30.10.%'
要仅在Etat_Civil
上授予权限,您可以尝试:
mysql> GRANT ALL PRIVILEGES ON Etat_Civil.* TO 'root'@'172.30.10.%'
答案 2 :(得分:0)
问题可能是“主机”:“ 172.30.10.58” 您可以将IP地址更改为主机名。
如果使用的是docker,请转到docker
docker exec -it CONTAINER_ID bash
sudo vi / etc / hostname和sudo vi / etc / hosts
希望获得帮助!