MySQL Servers for replication setup, one is a Master and the other is a Slave.
Master database keep record of all log then slave read the log created in Master and applied on mysql database.
Following are the steps to configure replication on Master & slave server:
- Master: Configure Master User and permissions:
Create a Master user which is used by slave to create connection or replicate the changes
CREATE USER 'user_name'@'%' IDENTIFIED BY 'user_password';
GRANT REPLICATION SLAVE ON *.* TO 'user_name'@'%';
FLUSH PRIVILEGES;
2. Master: Edit configuration file my.ini or my.cnf section [mysqld]
erver-id = 1 -- assign id to server
log-bin = mysql-bin.log -- start write log in file
binlog-do-db = your_database --database name for which replication established
3. On Slave: Edit the my.ini or my.cnf file at slave side.
server-id = 2
master-host = master_ip_address
master-connect-retry = 60
master-user = user_name
master-password = user_password
replicate-do-db = your_database
relay-log = slave-relay.log
relay-log-index = slave-relay-log.index
Note:
first line is used to assign an ID to this MySQL server.
second line is the I.P address of the Master server.
third line is used to set a retry limit in seconds.
username and password to the Slave, by using which it connect the Master.
4. Master: Flush the Master tables to take consistent backup.
--flush for consistent backup
FLUSH TABLES WITH READ LOCK;
--take data backup of the Master by using mysqldump
mysqldump your_database -u root -p > D://Backup/backup.sql;
5. Slave: Create database if not exists:
CREATE DATABASE `your_database`;
6. Slave: import backup to the slave mysql server.
mysql -u root -p your_database < D://Backup/backup.sql
--->Change `your_database` and backup directory according to your setup
7. Master: find the log file name and log position in the Master.
SHOW MASTER STATUS;
+------------------+----------+-----------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-----------------+------------------+
| mysql-bin.000001 | 130 | your_database | |
+------------------+----------+-----------------+------------------+
8. Slave: Run the following commands:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='user_name',
MASTER_PASSWORD='user_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=130;
SLAVE START;
9. Slave: check the slave status.
SHOW SLAVE STATUS;
10. Master: release the tables from lock by run the following.
UNLOCK TABLES;
--Note: Locked with this command at step 4 for consistent backup:
--FLUSH TABLES WITH READ LOCK;
Error Handling in Master Slave configuration:
- To skip just N query that is hanging the slave, use the following syntax
SET GLOBAL sql_slave_skip_counter = N;
--Example skip one error of hanging query: set as 1 value.
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter=1;
START SLAVE;
2. you might want to skip all duplicate errors you might be getting
1062 | Error 'Duplicate entry 'xyz' for key 1' on query
Edit the my.cnf file and set following parameter with error number:
slave-skip-errors = 1062
syntax:
slave-skip-errors=[err_code1,err_code2,...|all]
slave-skip-errors=1062,1053
slave-skip-errors=all
slave-skip-errors=ddl_exist_errors