MySQL Replication (M-M)

Prerequisites:
Two MySQL Servers — You need two MySQL servers, each with a unique hostname (e.g.,
server1.example.com
andserver2.example.com
).Network Access — Ensure that both MySQL servers can communicate with each other over the network (typically port
3306
).Admin Access — You need to have root access to both servers to configure replication and make the necessary changes.
Step 1: Initial MySQL Configuration
Configure MySQL on both servers to enable binary logging and unique server IDs.
Edit the
my.cnf
file on both servers (/etc/my.cnf
or/etc/mysql/my.cnf
depending on your system):On Server 1 (e.g.,
server1.example.com
):[mysqld] server-id = 1 # Unique server ID log-bin = mysql-bin # Enable binary logging for replication binlog-do-db = your_database_name # Optional: replicate only specific DBs
On Server 2 (e.g.,
server2.example.com
):[mysqld] server-id = 2 # Unique server ID (must differ from Server 1) log-bin = mysql-bin # Enable binary logging for replication binlog-do-db = your_database_name # Optional: replicate only specific DBs
After making these changes, restart MySQL on both servers:
sudo systemctl restart mysql
Step 2: Create Replication User
Create a replication user on both servers. This user will have the necessary privileges to replicate data between the servers.
On Server 1 (run from
mysql
client):CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
On Server 2 (run from
mysql
client):CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
Step 3: Get the Binary Log Coordinates
Find the current binary log position on each server.
On Server 1, execute:
SHOW MASTER STATUS;
This will show something like this:
+------------------+--------------+------------------+-----------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+--------------+------------------+-----------+ | mysql-bin.000001 | 107 | your_database_name | | +------------------+--------------+------------------+-----------+
Note the
File
andPosition
values. In this example, it’smysql-bin.000001
and107
.On Server 2, execute the same command to get the binary log status:
SHOW MASTER STATUS;
Again, note the
File
andPosition
.
Step 4: Set Up Replication on Server 1
Configure Server 1 to replicate from Server 2.
On Server 1, connect to the MySQL client and run:
CHANGE MASTER TO MASTER_HOST='server2.example.com', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', # Use the File from Server 2 MASTER_LOG_POS=107; # Use the Position from Server 2
Start the replication on Server 1:
START SLAVE;
Check the status of replication on Server 1 to ensure it’s running:
SHOW SLAVE STATUS\G
Look for
Slave_IO_Running: Yes
andSlave_SQL_Running: Yes
in the output. If both areYes
, replication is working.
Step 5: Set Up Replication on Server 2
Configure Server 2 to replicate from Server 1.
On Server 2, connect to the MySQL client and run:
CHANGE MASTER TO MASTER_HOST='server1.example.com', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', # Use the File from Server 1 MASTER_LOG_POS=107; # Use the Position from Server 1
Start the replication on Server 2:
START SLAVE;
Check the status of replication on Server 2:
SHOW SLAVE STATUS\G
Look for
Slave_IO_Running: Yes
andSlave_SQL_Running: Yes
in the output. If both areYes
, replication is working.
Step 6: Verify and Test the Setup
Test replication by inserting data into Server 1:
USE your_database_name; INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');
Check if the data appears on Server 2:
On Server 2, run:
SELECT * FROM your_table WHERE column1 = 'value1';
You should see the data inserted on Server 1 appearing on Server 2.
Repeat the same on Server 2, inserting data into Server 2, and check if it appears on Server 1.
Step 7: Monitor Replication
Regularly monitor the replication status using:
SHOW SLAVE STATUS\G
Ensure that both
Slave_IO_Running
andSlave_SQL_Running
areYes
.
Check for any replication errors. If you encounter errors, resolve them before proceeding to prevent data inconsistencies.
Last updated