如何在LAMP(Python)堆栈上打开远程MySQL连接

时间:2016-08-30 14:13:24

标签: python mysql linux django database

我正在开发一个存在MySQL数据库的django应用程序。 我的django应用程序和数据库设置在一台机器上。

现在我有另外两台运行脚本的机器需要远程连接到我主机上的MySQL数据库。

所以在我的主机上。我这样做了:

sudo nano /etc/mysql/my.cnf

然后改变了

bind-address           = 127.0.0.1

bind-address           = [my public ip address]

之后,我通过防火墙打开了对数据库端口的远程访问 通过运行:

sudo ufw allow 3306/tcp
sudo service ufw restart

之后,我运行了我的mysql并运行了以下命令:

CREATE USER newuser@[main machine ip address] IDENTIFIED BY 'my password';

GRANT ALL PRIVILEGES ON * . * TO newuser@[main machine ip address];

FLUSH PRIVILEGES;

现在,当我尝试使用以下命令从桌面应用程序远程连接到我的数据库时

用户名:newuser @ [我的公共IP地址]

密码:my_password

port:3306

数据库:我的数据库名称

主持人:[我的公共IP地址]

它没有连接并给出了错误'访问被拒绝'。还有什么我需要做的才能让它发挥作用吗?有什么想法吗?

更新

我尝试使用命令行从我的其他服务器连接到主服务器:

mysql -u newuser -p -h [my main server ip address]

mysql -u newuser@[my main server ip address] -p -h [my main server ip address]

它给了我这个错误:主机' [我的本地IP地址]'不允许连接到这个MySQL服务器

2 个答案:

答案 0 :(得分:1)

您为允许远程连接所做的设置看起来不错(虽然您没有提到重启mysql,但我认为已经完成了)。此外,我假设没有NAT,所有涉及的机器都直接连接到互联网(ifconfig显示WAN IP)。

我建议尝试连接mysql命令行客户端 - 它可能会提供更清晰的错误消息。虽然“拒绝访问”并且#39;一般意味着密码错误。我认为如果找不到用户名@ hostname,则会出现不同的错误消息。

答案 1 :(得分:1)

而不是做机器IP地址,允许任何主机'用户'@'%'并查看它是否有效。

如果是,请检查日志以查看您的主机名显示给服务器的内容。

不需要更改绑定地址。