Replikacija je sistem transporta sadržaja baze sa jednog servera na drugi.
U ovom sistemu rezlikuju se dva ključna elementa: master i slave. Master, kao primarno skladište podataka i Slave kao ciljno, sekundarno skladište, pri čemu je svako od ovih skladišta, ustvari, zaseban server. Zapravo, kada kažemo dva ključna elementa, mislimo samo na dve logičke celine, jer iako može postojati samo jedna skomponenta u ovom sistemu, slave komponenti može biti onoliko koliko to tehničke mogućnosti dozvoljavaju.
Replikacija nije nešto što sa sobom nosi i striktnu namenu. To je samo sistem, koji možemo upotrebiti za šta želimo. Ipak, korišćenje replikacije je praktično standard u sledećim procesima:
Osim u slučaju klaster MySQL konfiguracije, replikacija je jednosmeran, asinhroni proces, u kome se podaci kreću od master servera ka Slave serveru, odnosno, serverima.
Da bi replikacija mogla da funkcioniše, potrebno je da na master serveru bude aktivan binarni log (dnevnik). Onog trenutka kada slave-ovi počnu da slušaju« master-a, oni se, u stvari, pozicioniraju na zajedničku tačku loga (svaka pozicija u logu je markirana brojem). Tokom izvršavanja sql naredbi na master serveru (i u master log-u), dolazi do promene pozicije markera u logu. Periodično, slave server pregleda master log i poredi ga sa prethodnom verzijom. Sve što se desilo između dve provere izvršava se i na slave-u i na taj način dobija se tačno preslikavanje podataka.
Replikacija se u MySQL-u može aktivirati na više načina. Od običnih SQL naredbi i konzolnih naredbi MySQL-a do upotrebe aplikacija čija je jedina svrha rukovanje replikacijama.
Napomena:
Ako želite da isprobate na primeru sledeće uputstvo, neophodna su vam dva MySQL servera. Instalirajte dva MySQL servera na različitim računarima, ili na jednom računaru (u tom slučaju obratite pažnju da te dve instance servera imaju različite tcp/ip portove. Na primeru, mi ćemo koristiti jedan računar i portove 3306 i 3307).
Definitivno, pre nego što uopšte kreiramo replikaciju, moramo ustanoviti njenu svrhu. To je deo koji nećemo posebno obrađivati, jer se podrazumeva.
Nakon određivanja svrhe replikacije (kada već znamo koja će biti arhitektura naše replikacije, koliko ćemo želeti servera u njoj, koji će sve podaci biti uzimani u obzir) potrebno je da napravimo korisnika replikacije. Ovo nije neophodan korak. I korisnik ne mora biti kreiran specijalno za tu namenu, ali se strogo preporučuje iz bezbednosnih razloga.
Ovaj korisnik reprezentovaće slave servere na master serveru i zbog toga mora imati privilegiju replication slave. Recimo da je korisnik za koga smo kreirali replikaciju: rep, sa šifrom 123:
grant replication slave *.* to 'rep'@'localhost' identified by '123'
Domen našeg korisnika je localhost (jer je u pitanju proba) što je retko slučaj u praksi (slave serveri će biti na drugim računarima).
Nakon korisnika za replikaciju, potrebno je pripremiti i same servere; pre svega master. Minimum potreban da server bude učesnik u replikaciji kao master, je da poseduje replikacioni id i binarni log. Nevezano za način na koji ćemo ovo ostvariti, rezultat će biti sledeće dve linije u my.ini fajlu:
log-bin=mojBinLog
server-id=1
Ove dve linije moguće je uneti ručno ili putem aplikacije:
Naziv loga nije bitan, sve dok se uklapa u konvencije fajlova operativnog sistema. Id mora biti celobrojna vrednost i, naravno, treba da bude jedinstven za svaki server u replikaciji.
Nakon podešavanja ovih parametara (sve jedno da li ručno ili putem aplikacije), potrebno je restartovati server.
Za slave server je takođe potrebno obezbediti nekoliko podataka. Id (kao i na master serveru), autentikacione podatke za master server (autentikacija za korisnika rep), binarni log i relay log. (binarni log za slave nije neophodan, ali relay log jeste, jer se u njemu nalaze sve razlike između binarnog loga master-a i podataka na slave-u):
server-id = 2
master-host = localhost
master-port = 3306
master-user = rep
master-password = 123
log-bin = bin
log-bin-index = log-bin
log-error = error
relay-log = relay
relay-log-info-file = relay-log
relay-log-index = relay-log-index
Opisana procedura je dovoljna za replikaciju ako se radi o potpuno „čistim” serverima, gde još uvek nema podataka. Restart slave servera automatski će aktivirati i replikaciju.
Ukoliko želimo da počnemo replikaciju sa postojećim podacima (za šta je verovatnoća mnogo veća), potrebno je da uradimo još jednu stvar. Moramo slave-u reći sa koje pozicije treba da prati promene na log-u, što je najlakše uraditi na sledeći način:
Prvo preuzimamo skriptu master baze uz pomoć konzolnog alata mysqldump (nalazi se u MySQL bin folderu):
mysqldump -uroot --master-data mojabaza > bekap.sql
CHANGE MASTER TO MASTER_LOG_FILE='mojBinLog.000001', MASTER_LOG_POS=548;
Nakon izvršavanja ove naredbe, ukoliko je sve kako treba, trebalo bi da bude proizveden fajl bekap.sql. Nakon toga, ovaj fajl potreban nam je na slave serveru. Kada je fajl na serveru, aktiviramo njegovu skriptu sledećom konzolnom naredbom:
mysql -uroot < bekap.sql
ili na bilo koji drugi način. Startovanjem skripte iz MySQL Query Browser-a na primer.
Nakon ovog koraka, potrebno je samo da pristupimo slave serveru i aktiviramo naredbu slave start;
Od tog trenutka, sve izmene na master-u biće reflektovane i na slave server.
Replikacija se na slave serveru prekida naredbom stop slave.
Najvažnije iz lekcije: