By Francis Ndungu, Alibaba Cloud Tech Share Author. Tech Share is Alibaba Cloud's incentive program to encourage the sharing of technical knowledge and best practices within the cloud community.
Alibaba Cloud offers a hassle-free on-demand computing service, Elastic Compute Service (ECS), which can be deployed with just a few clicks and install a Linux distribution of your choice.
With each instance configured, you can run highly scalable database servers such as MySQL. On top of these, you can take advantage of their fast memory and latest CPUs to create a redundant environment for your MySQL server.
A MySQL Master-Slave replication uses separate Alibaba Cloud ECS instances to offer a clustered environment for your database. Data is live-copied to multiple computers for backup service, analysis or for scaling out and creating different nodes for multiple applications.
In this guide, we will show you how to setup and configure MySQL Master-Slave replication on your Ubuntu 16.04 server running on Alibaba Cloud.
For the sake of simplicity, we will use be using two servers; server 1 and server 2 with the IP addresses 11.11.11.11 and 22.22.22.22.
The first step is installing MySQL server on server 1 with IP address 11.11.11.11. So SSH to your server and run the below commands:
$ sudo apt-get update
$ sudo apt-get install mysql-server
Press Y and hit Enter when prompted to confirm the installation.
Next, edit the MySQL configuration file in order for MySQL server to allow remote access:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Look for the line bind-address and change its value to '0.0.0.0'.
bind-address = 127.0.0.1
Change to :
bind-address =0.0.0.0
This will cause MySQL to allow inbound connections.
Next, add the below lines near the end of that configuration file:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
Press CTRL+X, Y and hit Enter to save the file.
Restart MySQL server for the changes to take effect:
$ sudo service mysql restart
Next you need to create a new user that will handle replication services on server 1. So, log in to your MySQL on server 1.
$ sudo mysql -u root -p
Enter your password when prompted to do so and hit Enter to continue.
On the MySQL prompt that appears, enter the below SQL queries to create the user:
mysql > create user 'replication_user'@'%' identified by 'PASSWORD';
mysql > GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
mysql > FLUSH PRIVILEGES;
Remember to replace 'PASSWORD' with a strong value for security purposes.
Before you exit the MySQL prompt, enter the command below to view information about the position and file of the Master Server
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Here, you need to note the file name, 'mysql-bin.000001' and Position '154'. You will need these details when configuring server 2. Please note, these values might be different on your server.
Just like you did in the first server, you need to install MySQL server on the second server. Run the commands below:
$ sudo apt-get update
$ sudo apt-get install mysql-server
Press Y and hit Enter when prompted to confirm the installation.
Also, you will need to supply a root password for your MySQL server. Then, hit Enter on the screen that pops-up. Repeat the password one more time on the next screen for confirmation.
Next, edit the MySQL configuration file on server 2 to allow remote access:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Look for the line bind-address and change its value to '0.0.0.0'.
bind-address = 127.0.0.1
Change to:
bind-address =0.0.0.0
This will cause MySQL to allow inbound connections.
Next, add the below lines near the end of the file:
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
Please note the server-id is '2'.
Press CTRL+X, Y and hit Enter to save the file.
Restart MySQL on server 2 for the changes to take effect:
$ sudo service mysql restart
Next, login to MySQL on server 2:
$ sudo mysql -u root -p
Enter your password and hit Enter to continue.
On the MySQL prompt that appears, enter the below details and replace IP address (11.11.11.11) with the public IP address associated with your Alibaba ECS instance running server 1.
Also, replace the 'MASTER_LOG_FILE' and 'MASTER_LOG_POS' with the information you obtained from server 1.
The MySQL username and password should also match the values you created on server 1.
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST = '11.11.11.11', MASTER_USER = 'replication_user', MASTER_PASSWORD = 'PASSWORD', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 753;
mysql > start slave;
mysql > Quit;
You should now test the configuration and see whether MySQL replication is working as expected. To confirm this, log in to MySQL on server 1
$ sudo mysql -u root -p
Enter your root password and hit Enter to continue.
On the MySQL prompt that appears, create a database (e.g. replica_demo ):
mysql> create database replica_demo;
Query OK, 1 row affected (0.01 sec)
Then, log in to MySQL on server 2:
$ sudo mysql -u root -p
Enter your root password and hit Enter to continue.
On the MySQL prompt that appears, type the below SQL command to list available databases:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replica_demo |
| sys |
+--------------------+
5 rows in set (0.00 sec)
The output above is for server 2 and it clearly confirms that MySQL Master-Slave replication is working as expected because the database 'replica-demo' was replicated on server 2.
We can take the proof of concept further and add a table 'students' on the 'replica_demo' database on server 1:
On server 1 run the commands below on the MySQL prompt:
mysql> use replica_demo
Output
Database changed
Then create the students table with the command below:
mysql> CREATE TABLE students ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, student_name VARCHAR(30) NOT NULL );
Output
mysql> Query OK, 0 rows affected (0.06 sec)
You need to insert some values using the command below:
mysql> insert into students(id, student_name) values ('1001', 'John Doe');
Output
Query OK, 1 row affected (0.01 sec)
Then add another record,
mysql> insert into students(id, student_name) values ('1002', 'Mary Doe');
Output
Query OK, 1 row affected (0.03 sec)
To confirm if the changes were effected on server 2, run the commands below:
mysql> use replica_demo
Output
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Then, run the command below to list records on the students table:
mysql> select * from students;
+------+--------------+
| id | student_name |
+------+--------------+
| 1001 | John Doe |
| 1002 | Mary Doe |
+------+--------------+
2 rows in set (0.00 sec)
That's it. The students table we created on server 1 and the list of students were successfully replicated on server 2.
In this guide, we have showed you how to setup MySQL server on two separate Alibaba Cloud ECS instances. We have also taken you through the steps of setting up a Master-Slave configuration for your MySQL databases.
We also have proven the concept by adding a sample database and some records. If you followed the guide, you were able to add another layer of security to your database by creating a MySQL replication node that live-copies your production database.
2,599 posts | 765 followers
FollowAlibaba Clouder - July 1, 2019
Alibaba Clouder - October 22, 2018
Alibaba Clouder - May 28, 2019
Alibaba Clouder - February 13, 2019
Alibaba Clouder - July 9, 2018
Alibaba Clouder - May 14, 2018
2,599 posts | 765 followers
FollowElastic and secure virtual cloud servers to cater all your cloud hosting needs.
Learn MoreAn encrypted and secure cloud storage service which stores, processes and accesses massive amounts of data from anywhere in the world
Learn MoreLearn More
More Posts by Alibaba Clouder
Raja_KT February 8, 2019 at 7:45 am
Good one and it is quite handy. I am also of the opinion of using Apsara as many automations. It takes a lot of doing to build master-slave replication and RAID as documented in Apsara. Most of the stuffs now require HA, reliability etc. To install and take care of security, it is a pain. Backup again , can be costly, even if we bring in cheap tools. We need to manage the Licensing. Again the server and expensive DBA tasks can be daunting. Again , the autoscaling part is a question.