Question

Connect one LAMP app to mysql database of another LAMP app

I have 2 droplets, both with a LAMP stack. Both also have PHPMyAdmin installed, run a PHP application, and have a self-signed SSH certificate that auto redirects to https.

What I would like to do is connect to the MySQL database that’s on Droplet 1 from the app on Droplet 2. I know you can do this by running a mysql server Droplet 1, but both need to run a full PHP app in this case.

Here is what I’ve already done and tried:

  • Enabled private networking on both droplets (https://www.digitalocean.com/community/tutorials/how-to-enable-digitalocean-private-networking-on-existing-droplets)
  • On Droplet 1 I’ve added port 3306 to the firewall with sudo ufw allow 3306/tcp and sudo service ufw restart
  • Both have the same firewall settings applied that are configured in the DO interface. I’ve added ‘All TCP’, ‘All ports’ from source ‘Droplet 2’
  • Outbound rules on the firewall settings are ‘ICMP’, ‘All TCP’ and ‘All UDP’ from ‘All ports’ and ‘All IPv4’ and ‘All IPv6’
  • I’ve created a MySQL user through PMA on Droplet 1 with hostname %

My PHP app connection settings $db[‘remote_db’] = array( ‘dsn’ => ‘’, ‘hostname’ => ‘PRIVATE IP OF DROPLET HERE’, // in the format xx.xx.xx.xx so not with https:// in front of it ‘port’ => 3306, ‘username’ => ‘user’, ‘password’ => ‘password’, ‘database’ => ‘database’, ‘dbdriver’ => ‘mysqli’, ‘dbprefix’ => ‘’, ‘pconnect’ => FALSE, ‘db_debug’ => FALSE, ‘cache_on’ => FALSE, ‘cachedir’ => ‘’, ‘char_set’ => ‘utf8’, ‘dbcollat’ => ‘utf8_general_ci’, ‘swap_pre’ => ‘’, ‘encrypt’ => FALSE, ‘compress’ => FALSE, ‘stricton’ => FALSE, ‘failover’ => array(), ‘save_queries’ => TRUE );

Currently the app op Droplet 2 can not connect to the database that runs on Droplet 1. What am I missing?

A few questions:

  1. Do I need to do anything in the /etc/mysql/my.cnf file with bind-address?
  2. When creating the user on Droplet one through PMA, did I use the right settings?
  3. Any other setting that I’m missing?
Show comments

Submit an answer


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

By default, MySQL is bound to the loopback interface, so it’s not reachable from others, e.g. you’re private network.

You can try binding it to the private address, or if that doesn’t work (0.0.0.0). Be careful with 0.0.0.0 as it will allow traffic from any interface!

About the user, % should be good enough. If you want to additionally secure, you try to use private address instead of %. % allows you to connect using that user from any IP address. If you’re going to use only another Droplet, you can try to change it to the appropriate IP.

If that doesn’t work, try to get some logs, as that can help you to debug it further.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.