Accessing Mysql database installed in an LXD container
- Published on 20 May, 2017
This is my second post on LXD containers. Sometimes, using a container is a cleaner way to install and use applications for a number of reasons:
You can install packages from any version of any distribution. That means, even if you are using an LTS release of Ubuntu like me, you don't necessarily have to stick to an older version of a package. Or if some package is only supported on rpm based distributions, you don't need to worry about it.
You can go ahead and completely uninstall/reinstall it at any time without worrying about residual files or configurations.
You can roll back to a previous state in no time if something goes wrong unexpectedly (lxd snapshots!)
And then there is the security perspective also (lxd containers are secure by nature).
Last weekend I tried running mysql database from a local container and connect to it from my local system. Here's how:
Create a brand new lxd container:
lxc launch ubuntu:xenial mysql-test
Create a bash session inside the container:
lxc exec mysql-test bash
Install mysql database server within the container:
sudo apt install mysql-server
Access the mysql database from inside the container as the root user:
mysql -u root -p
Allow remote access to root from any host:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'
where password is the password to be used while accessing mysql from outside of the container.
Enable built-in firewall configurer and allow mysql access from outside:
sudo ufw enable&&sudo ufw allow mysql
Exit the mysql client. Open the file '/etc/mysql/mysql.conf.d/mysqld.cnf' in your favourite text editor and comment the following line out by typing # at the starting of the line:
#bind-address = 127.0.0.1
Restart the mysql service:
sudo service mysql restart
Now exit the container. We need to check the IP of the container to access the database from the host. 'lxc list' should do the trick:
Now from your host machine, try accessing the mysql server with the root password that you set in step #5:
mysql -h 10.182.248.44 -u root -p
You should be all set now. But the IP address of the container box will change every time you start your container. There's a way to stop it from changing. In my next post, I will share how to bind a static IP address to an lxd container.