Digital Ocean将一个Droplet连接到另一个Droplet的MySQL DB

时间:2018-02-13 08:46:02

标签: mysql tcp digital-ocean

我有2个液滴,两个都有一个LAMP堆栈(Ubuntu 16.04)。两者都安装了PHPMyAdmin,运行PHP应用程序,并拥有自动重定向到https的自签名SSH证书。

我想要做的是从Droplet 2上的应用程序连接到Droplet 1上的MySQL数据库。我知道你可以通过在Droplet 1上运行MySQL服务器来实现这一点,但两者都需要运行在这种情况下,一个完整的PHP应用程序。

以下是我已经完成并尝试过的事情:

  • 在两个水滴上启用私人网络(请参阅this tutorial
  • On Droplet 1我已使用sudo ufw allow 3306/tcpsudo service ufw restart
  • 将端口3306添加到防火墙
  • 两者都具有在DO界面中配置的相同防火墙设置。我已经添加了所有TCP','所有端口'来源' Droplet 2'
  • 防火墙设置的出站规则是' ICMP','所有TCP'和'所有UDP'来自'所有港口'和'所有IPv4'和'所有IPv6'
  • 我通过主机名%
  • 的Droplet 1上的PMA创建了一个MySQL用户

我的PHP应用连接设置(CodeIgniter 3.1.7)

$db['remotedb'] = array(
'dsn' => '',
'hostname' => 'PRIVATE IP OF DROPLET HERE', // in the format xx.xx.xx.xx so without https:// in front of it 
'port' => 3306,
'username' => 'user',
'password' => 'password',
'database' => 'database',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'dbdebug' => FALSE,
'cacheon' => FALSE,
'cachedir' => '',
'charset' => 'utf8',
'dbcollat' => 'utf8generalci',
'swappre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'savequeries' => TRUE
);

目前,Droplet 2上的应用程序无法连接到Droplet 1上运行的数据库。我缺少什么?

几个问题:

  • 安装两个水滴时,我跑了mysql_secure_installation。如果我没记错,禁止远程访问mysql数据库,但不确定。我也不知道如何重新启用它(如果需要)。
  • 我是否需要在/etc/mysql/my.cnf文件中使用bind-address执行任何操作?
  • 在Droplet 1到PMA上创建用户时,我是否使用了正确的设置?
  • 我缺少的任何其他设置?

修改 正在运行netstat -nltp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
tcp6       0      0 :::25                   :::*                    LISTEN      -               
tcp6       0      0 :::443                  :::*                    LISTEN      -               
tcp6       0      0 :::80                   :::*                    LISTEN      -     

1 个答案:

答案 0 :(得分:0)

确保my.cnf文件中包含正确的绑定地址。

bind-address                   = << private IP here >>

抬头,MySQL只支持绑定到服务器上的0,1或所有IP地址,因此如果您不想收听私有IP和公共IP,那么您将不得不使用私有IP和设置你在Droplet上的PHP应用程序连接到那个而不是127.0.0.1