Avem doua servere diferite si vrem sa configuram replicarea MySQL de tip Master-Slave.
Pentru acest exemplu vom folosi:
Server 1: 127.0.0.1 - il vom folosi ca si Master (serverul principal)
Server 2: 127.0.0.2 - Slave (serverul secundar)

Inainte de a continua, asigurati-va ca aveti instalat mysql si mysql-server:
CentOS/RHEL: yum install -y mysql mysql-client
Debian/Ubuntu: sudo apt-get install -y mysql mysql-client

CONFIGURARE MASTER
Incepem cu adaugarea urmatoarelor linii in /etc/my.cnf
Important: Aveti grija ca liniile introduse in config sa fie sub [mysql] sau [mysqld], si nu sub [mysql_safe]

#Replication
log-bin = /var/lib/mysql/mysql-bin
server-id = 1
sync-binlog = 1
binlog-format = mixed
relay-log = mysqld-relay-bin

In prima faza creem baza de date si importam din backup daca e cazul:

CREATE DATABASE linuxtmdb; 

Daca e cazul, importam baza de date ruland:

mysql -u root linuxtmdb < linuxtmdb.sql

Facem utilizatorul pe care il vom utiliza la replicare si actualizam:

GRANT REPLICATION SLAVE ON *.* TO 'replication'@'127.0.0.2' IDENTIFIED BY 'parola';
FLUSH PRIVILEGES;

Selectam baza de date si o blocam:

USE linuxtmdb;
FLUSH TABLES WITH READ LOCK;

Verificam statusul master-ului (ne va folosi mai incolo):

SHOW MASTER STATUS;

Facem dump la baza de date (aveti grija sa iesiti din mysql (exit sau Ctrl+C) si apoi rulati comanda de mai jos):

mysqldump -u root --opt linuxtmdb > iulianwp.sql

Intram inapoi in MySQL si deblocam baza de date:

USE linuxtmdb;
UNLOCK TABLES;

Acum configurarea master-ului este completa. In continuare ne mutam pe celalalt server si configuram slave-ul.

CONFIGURARE SLAVE

Verificam in /etc/my.cnf sa avem optiunea server-id = 2 (diferita de 0 care e default sau 1 care e masterul).
In prima faza facem baza de date:

CREATE DATABASE linuxtmdb;

Iesim din MySQL si importam baza de date (la care am facut dump pe serverul principal):

mysql -u root linuxtmdb < linuxtmdb.sql

Acum trebuie sa definim master-ul, astfel incat MySQL sa stie unde sa se conecteze pentru a face replicarea. Aici ne este de folos informatia afisata de SHOW MASTER STATUS; de mai devreme - inlocuim valorile de la MASTER_LOG_FILE si MASTER_LOG_POS cu cele afisate.

CHANGE MASTER TO MASTER_HOST='IP',MASTER_USER='replication', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS= 289399;

Pornim slave-ul si verificam daca totul este in regula:

start slave;
show slave status \G;

Daca totul a decurs normal, nu veti vedea nici o eroare si acum orice modificari in baza de date pe serverul principal (Master) vor fi imediat vizibile si pe Slave.