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:

  1. Sigurnosne kopije mogu se izvoditi na podređenom poslužitelju bez utjecaja (i utjecaja na njih) operacija pisanja u masteru.
  2. 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.

  1. 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.