Kako postaviti MariaDB (Master-Slave) replikaciju u CentOS/RHEL 7 i Debian 8/9
Čak i kad neki informatičari čuju frazu „Replikacija baze podataka“, često je povezuju s potrebom posjedovanja više kopija istih podataka kako bi se izbjegao gubitak podataka u slučaju kvara hardvera ili oštećenja podataka. Iako je to donekle točno, replikacija baze podataka ima mnogo više od uobičajenog koncepta izrade sigurnosne kopije baze podataka i dostupnosti podataka.
Među ostalim prednostima replikacije baze podataka u postavljanju master-slave možemo spomenuti:
- Sigurnosne kopije mogu se izvoditi na podređenom poslužitelju bez utjecaja (i utjecaja na njih) operacija pisanja u masteru.
- Operacije koje zahtijevaju resurse (poput analize podataka) mogu se izvoditi na podređenom uređaju bez utjecaja na performanse glavnog.
U ovom ćemo članku objasniti kako postaviti replikaciju master-slave u MariaDB 10.1. Za razliku od klasične replikacije, MariaDB je predstavio koncept globalnih ID-ova transakcija (GTID) u verziji 10.0, koji omogućuje promjenu podređenog uređaja radi povezivanja i kopiranja s drugog master-a. Povrh toga, stanje podređenog zapisa bilježi se na siguran način (ažuriranja stanja vrše se u istoj transakciji kao i ažuriranja podataka).
Ako tražite replikaciju MySQL pod CentOS/RHEL 6, slijedite ovaj vodič Postavljanje replikacije MySQL (Master-Slave) na CentOS/RHEL 6
Instaliranje MariaDB 10.1 u CentOS/RHEL 7 i Debian 8/9
Naše se testno okruženje sastoji od sljedećih strojeva (oba su CentOS 7):
Master: 192.168.0.18 Slave: 192.168.0.19
Da bismo instalirali najnoviju verziju MariaDB, morat ćemo dodati njihova spremišta na naše poslužitelje. Ako koristite stariju verziju MariaDB recimo 5.5, razmislite o nadogradnji na najnoviju verziju 10.1 pomoću članka u nastavku.
- Nadogradite MariaDB 5.5 na MariaDB 10.1
Stvorite datoteku s imenom MariaDB.repo
unutar /etc/yum.repos.d sa sljedećim sadržajem na glavnom i podređenom sustavu:
# MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Spremite datoteku i instalirajte MariaDB na oba poslužitelja koristeći yum:
# yum update && yum install MariaDB-server MariaDB-client
Dodajte ključ za provjeru autentičnosti paketa i spremište MariaDB:
# apt-get install software-properties-common # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
Napomena: Zamijenite ime i kodno ime distribucije u gore istaknutom retku.
Instalirajte pomoću naredbe apt-get:
# apt-get update # apt-get install mariadb-server
Nakon što instalirate MariaDB, pokrenite postupak mysql_secure_installation
i na glavnom i na pomoćnom uređaju, postavimo uzorak testne baze podataka u glavnom stroju.
Postavljanje uzorka MySQL baze podataka na Masteru
Sada ćemo na glavnom poslužitelju postaviti bazu podataka Zaposlenici
s https://github.com/datacharmer/test_db (koja pruža skup podataka od 4 milijuna zapisa raspoređenih u šest tablica) u dva jednostavna koraka:
Klonirajte spremište i upotrijebite ga za uvoz uzorka baze podataka u vašu instalaciju MariaDB:
# git clone https://github.com/datacharmer/test_db # cd test_db # mysql < employees.sql
Konfiguriranje MySQL poslužitelja na Masteru
Da biste konfigurirali master, slijedite ove korake:
KORAK 1: Uredite datoteku /etc/my.cnf
. U odjeljak [mysqld]
dodajte sljedeća četiri retka:
log-bin server_id=1 replicate-do-db=employees bind-address=192.168.0.18
i ponovno pokrenite MariaDB:
# systemctl restart mariadb
KORAK 2: Prijavite se na MariaDB poslužitelj kao root, stvorite korisničkog roba i dodijelite potrebne potpore:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; MariaDB [(none)]> SHOW MASTER STATUS;
Posljednja naredba (SHOW MASTER STATUS) vraća trenutni položaj u binarnom dnevniku (točne koordinate koje točno pokazuju s koje točke slave treba početi replicirati iz:
KORAK 3: Izađite iz upita MariaDB (s exit;
) i upotrijebite sljedeću naredbu za snimanje baze podataka zaposlenika. Kada pritisnete Enter, od vas će se zatražiti da unesete lozinku za root koji ste ranije postavili putem mysql_secure_installation
:
# mysqldump -u root -p employees > employees-dump.sql
Nakon što je dump završen, ponovno se povežite s poslužiteljem baze podataka da biste otključali tablice, a zatim izađite:
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
KORAK 4: Kopirajte odlagalište u slave:
# scp employees-dump.sql [email :/root/
KORAK 5: Pokrenite postupak mysql_upgrade
za nadogradnju sistemskih tablica (od vas će se zatražiti da unesete matičnu lozinku MariaDB):
# mysql_upgrade -u root -p
KORAK 6: Dopustite uslugu baze podataka kroz vatrozid:
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
Ajmo sada konfigurirati slave.
Konfiguriranje MySQL poslužitelja na slave uređaju
Da biste konfigurirali slave, slijedite ove korake:
KORAK 1: Stvorite račun za izvršavanje zadataka replikacije. Povežite se s lokalnim MariaDB poslužiteljem pomoću:
# mysql -u root –p
i unesite lozinku koju ste ranije postavili.
KORAK 2: Jednom kad se povežete s poslužiteljem baze podataka, stvorite korisnika i praznu bazu podataka i dodijelite dozvole:
MariaDB [(none)]> CREATE DATABASE employees; MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
KORAK 3: Izađite iz upita MariaDB i učitajte deponij stvoren na glavnom poslužitelju:
# mysql -u root -p employees < employees-dump.sql
KORAK 4: Uredite datoteku /etc/my.cnf
kako biste robovu dodijelili ID poslužitelja u odjeljku [mysqld]
. Imajte na umu da to mora biti drugačija cjelobrojna vrijednost od 1, kao što smo koristili 1 u masteru:
server_id=2 replicate-do-db=employees
Ponovo pokrenite poslužitelj baze podataka:
# systemctl restart mariadb
KORAK 5: Pokrenite postupak mysql_upgrade
za nadogradnju sistemskih tablica (od vas će se zatražiti da unesete matičnu lozinku MariaDB):
# mysql_upgrade -u root -p
KORAK 6: Jednom kada je deponija uvezena u slave, samo smo nekoliko koraka da započnemo s replikacijom. Prijavite se na bazu podataka i pokrenite sljedeće naredbe u odzivu MariaDB. Obratite posebnu pozornost na varijable MASTER_LOG_FILE
i MASTER_LOG_POS
, koje bi se trebale podudarati s vrijednostima koje prikazuje SHOW MASTER STATUS u 2. KORAKU "Konfiguriranja master-a" gore.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.18', MASTER_USER='slave', MASTER_PASSWORD='SlavePassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=314, MASTER_CONNECT_RETRY=10, MASTER_USE_GTID=current_pos;
KORAK 7: Pokrenite slave i provjerite njegov status bez izlaska iz upita MariaDB:
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G;
Nije da vam ovo treba sada, ali imajte na umu da možete zaustaviti roba pomoću:
MariaDB [(none)]> STOP SLAVE;
ako naredba SHOW SLAVE STATUS\G;
vrati bilo kakve pogreške. Koristite te pogreške za rješavanje problema, a zatim pokrenite START SLAVE;
za ponovno testiranje.
Testirajte replikaciju baze podataka MySQL/MariaDB
Dodajmo zapis u tablicu zaposlenika na glavnom poslužitelju:
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
Zatim provjerite je li ta promjena replicirana u slave-u:
MariaDB [(none)]> USE employees; MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
Kao što vidite, replikacija ispravno radi od gospodara do podređenog.
Sažetak
U ovom smo članku objasnili kako instalirati najnoviju verziju MariaDB u CentOS/RHEL 7 i Debian 8/9, te raspravljali o tome kako postaviti replikaciju master-slave s GTID-ovima. Za više informacija, možda ćete htjeti uputiti se na Vodič za replikaciju MariaDB, i ne ustručavajte se kontaktirati nas pomoću obrasca u nastavku ako imate pitanja ili komentare.