MySQL replikacija je zanimljiva značajka koja korisnicima omogućuje upravljanje s više kopija jedne ili više MySQL baza podataka. Podaci se automatski kopiraju s izvorne na replike baze podataka. To može biti korisno u brojnim situacijama, kao što je rad s podacima bez ugrožavanja glavne baze podataka, sigurnosno kopiranje podataka ili skaliranje pristupa bazi podataka itd.
U ovom vodiču, proći ćemo kroz korake postavljanja MySQL instance na jednom poslužitelju kao izvorne baze podataka, a zatim konfiguriranja MySQL instance na drugom poslužitelju da funkcionira kao njezina replika.
Preduvjeti
Ovaj vodič će prikazati vrlo jednostavan primjer MySQL replikacije. Uključuje jednu izvornu i jednu replika bazu podataka. Izvorna baza podataka je primarna kopija baze podataka, dok će replika baza podataka biti replika izvorne baze podataka. Za našu demonstraciju, dva poslužitelja su konfigurirana sa sljedećim IP adresama:
- Izvorni poslužitelj: 31.171.240.179
- Replika poslužitelj: 31.171.250.139
Svaki poslužitelj je konfiguriran s najnovijom Ubuntu 20.04 server konfiguracijom. Prvo slijedite korake vodiča koji pokazuju kako postaviti svoj Ubuntu poslužitelj. Imajte na umu da broj replika baza podataka može biti veći. Ovaj vodič pretpostavlja da već imate instaliran i konfiguriran MySQL. Trebate pomoć s instalacijom MySQL-a? Ovaj vodič detaljno prikazuje korake instalacije i osnovnog korištenja MySQL-a.
Ukratko, evo paketa koji su vam potrebni:
|
1 |
$ sudo apt install mysql-server mysql-client |
Vatrozidi na oba sustava trebali bi biti konfigurirani tako da dopuštaju promet s oba sustava na priključku 3306. To je zadani priključak za MySQL. Više o osnovama UFW-a uz demonstraciju možete saznati u našem blog postu.
Konfiguracija izvorne baze podataka
-
Podešavanje MySQL konfiguracije
MySQL koristi my.cnf kao primarnu konfiguracijsku datoteku. Ažurirat ćemo my.cnf kako bismo poslužitelj označili kao izvor. Prvo otvorite konfiguracijsku datoteku pomoću uređivača teksta:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Zatim dodajte sljedeće retke ispod odjeljka mysqld:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Što znače ovi retci?
bind-address: Ovo je unos koji definira povezanost između usluge i IP adrese. Prema zadanim postavkama, vrijednost može biti127.0.0.1(localhost). Nova vrijednost bit će IP adresa poslužitelja.server-id: U MySQL replikaciji, svaki poslužitelj mora imati jedinstveni ID poslužitelja. To može biti bilo koji broj. Radi jednostavnosti, postavljen je na1.log_bin: Pohranjuje stvarne pojedinosti replikacije. Replika baze podataka kopirat će sve što je registrirano u dnevniku.binlog_do_db: Ovaj unos označava bazu podataka koja će biti predmet replikacije na replika poslužitelju. Može postojati više od jedne baze podataka. Ovdje je ogledna baza podatakanewdatabase.
Nakon unosa izmjena, spremite konfiguracijsku datoteku. MySQL zahtijeva ponovno pokretanje kako bi učitao promjene u my.cnf:
|
1 |
$ sudo service mysql restart |
-
Dodjeljivanje dopuštenja replika korisniku
Sljedeći korak je stvaranje replika korisnika i dodjeljivanje odgovarajućih privilegija. To je potrebno učiniti iz MySQL ljuske. Prvo pokrenite MySQL ljusku:
|
1 |
$ sudo mysql -u root -p |
Zatim stvorite namjenskog korisnika za repliku baze podataka. Promijenite korisničko ime i lozinku na odgovarajući način:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Sada dodijelite odgovarajuće privilegije korisniku:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Više o MySQL korisnicima i dopuštenjima možete saznati u našem blog postu. Zatim ponovno učitajte tablicu dodjele kako bi promjene stupile na snagu:
|
1 |
$ FLUSH PRIVILEGES; |
-
Podešavanje baze podataka
Potrebna nam je kopija izvorne baze podataka na replici. Moguće je ručno izgraditi strukturu. Međutim, u većini slučajeva to je prilično nezgodno. Zato je izravan izvoz baze podataka najoptimalnije rješenje. U ovom primjeru, izvorna baza podataka je newdatabase. Promijenite trenutnu bazu podataka:
|
1 |
$ USE newdatabase; |
Sljedeća naredba će zaključati bazu podataka, sprječavajući bilo kakve nove promjene:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Zatim provjerite status baze podataka:
|
1 |
$ SHOW MASTER STATUS; |
S ove pozicije, replika baze podataka započet će replikaciju s izvora. Ovi brojevi će biti korisni kasnije, pa ih zabilježite. Ako se unesu bilo kakve promjene iz istog prozora, MySQL će automatski otključati bazu podataka. Stoga se preporučuje da sljedeće korake izvršite u drugoj kartici ili prozoru terminala. Baza podataka je još uvijek zaključana. Izvezite je u prijenosnu SQL datoteku:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
Zadatak je sada završen. Zatim otključajte bazu podataka:
|
1 |
$ UNLOCK TABLES; |
Na kraju, izađite iz ljuske:
|
1 |
$ QUIT; |
Replica Configuration
Sada je vrijeme za konfiguraciju replike baze podataka.
-
Uvoz izvorne baze podataka
Potrebna nam je kopija izvorne baze podataka na replika poslužitelju. Za to ćemo koristiti SQL datoteku koju smo ranije izvezli. Pokrenite MySQL ljusku:
|
1 |
$ sudo mysql -u root -p |
Nakon toga kreirajte praznu bazu podataka koristeći isti naziv baze podataka:
|
1 |
$ CREATE DATABASE newdatabase; |
Zatim izađite iz ljuske:
|
1 |
$ EXIT; |
Sada uvezite SQL datoteku u bazu podataka:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
Podešavanje MySQL konfiguracije
Potrebno je deklarirati nekoliko stvari u MySQL konfiguracijskoj datoteci. Otvorite konfiguracijsku datoteku u uređivaču teksta:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Sljedeći unosi ići će pod odjeljak mysqld. U suprotnom neće raditi. Prvi je ID poslužitelja. Kao što je ranije spomenuto, on mora biti jedinstven za sve poslužitelje u konfiguraciji replikacije izvor-replika. Za demonstraciju, postavljen je na 2:
|
1 |
$ server-id = 2 |
Zatim dodajte sljedeće retke:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Ovdje je samo relay-log novi unos. To je zapisnik koji replika poslužitelj stvara tijekom replikacije. Format zapisnika je isti kao i binarni zapisnik. Spremite konfiguracijsku datoteku i ponovno pokrenite MySQL:
|
1 |
$ sudo service mysql restart |
-
Omogućavanje replikacije
Napokon, spremni smo omogućiti replikaciju unutar MySQL-a. Pokrenite MySQL ljusku:
|
1 |
$ sudo mysql -u root -p |
Pokrenite sljedeću naredbu. Prvo, u skladu s tim promijenite IP adresu, korisničko ime i lozinke:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Naredba postiže sljedeće:
- Trenutni poslužitelj označen je kao replika izvornog poslužitelja.
- Replika poslužitelj ima ispravne vjerodajnice za prijavu.
- Replika poslužitelj zna odakle započeti replikaciju. Sjećate se statusa baze podataka koji smo provjerili na izvornom poslužitelju? Izvorna datoteka zapisnika i pozicija zapisnika dolaze od tamo.
Na kraju, aktivirajte replika poslužitelj:
|
1 |
$ START REPLICA; |
-
Razno
Trebate provjeriti pojedinosti o trenutnom stanju replike? Pokrenite sljedeću naredbu u MySQL ljusci. Znak \G na kraju služi za preraspodjelu teksta kako bi bio čitljiviji:
|
1 |
$ SHOW REPLICA STATUS\G |
Ako postoji problem s povezivanjem, pokušajte pokrenuti replika poslužitelj kako biste ga preskočili:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Zaključak
MySQL replikacija ima mnogo implikacija. To je samo kratka demonstracija njezinog osnovnog oblika. Međutim, lako se može proširiti na višestruke izvor-replika konfiguracije. Isti koraci također će se primijeniti na sve složene konfiguracije više razine. Uvijek je dobra ideja testirati svaku konfiguraciju nakon toga. Pokušajte izvršiti neke insert, delete ili update naredbe na izvornoj bazi podataka. Ako konfiguracija radi, baza podataka replike trebala bi ispravno preuzeti sve.
Osim toga, možete pogledati više resursa s našeg bloga koji pokrivaju što možete učiniti s MySQL-om:
- SQLite vs MySQL vs. PostgreSQL: Usporedba relacijskih sustava za upravljanje bazama podataka
- Kako resetirati root lozinku za MariaDB ili MySQL
- Kako instalirati LEMP stack (Linux, Nginx, MySQL PHP) na Ubuntu 20.04
Ugodan rad!







Komentari
Još nema komentara. Budite prvi.