Kako nastaviti replikacijo MariaDB (Master-Slave) v CentOS/RHEL 7 in Debian 8/9


Tudi ko nekateri informatiki slišijo besedno zvezo »Podvajanje zbirke podatkov«, jo pogosto povežejo s potrebo po več kopij istih informacij, da bi se izognili izgubi podatkov v primeru okvare strojne opreme ali poškodbe podatkov. Čeprav to do neke mere drži, je podvajanje baze podatkov veliko več kot običajni koncept varnostnega kopiranja baze podatkov in razpoložljivosti podatkov.

Med drugimi prednostmi podvajanja zbirke podatkov pri nastavitvi master-slave lahko omenimo:

  1. Varnostne kopije je mogoče narediti na podrejenem strežniku, ne da bi vplivale (in nanje vplivale) operacije pisanja v glavni enoti.
  2. Zahtevane operacije z viri (na primer analiza podatkov) je mogoče izvajati na pomožni enoti, ne da bi to vplivalo na delovanje glavne enote.

V tem članku bomo razložili, kako nastaviti replikacijo glavni-podrejeni v MariaDB 10.1. V nasprotju s klasično replikacijo je MariaDB v različici 10.0 predstavil koncept ID-jev globalnih transakcij (GTID), ki omogoča enostavno spreminjanje podrejenega in povezovanje z drugim nadrejenim. Poleg tega se stanje podrejenega zabeleži na varen način (posodobitve stanja se izvedejo v isti transakciji kot posodobitve podatkov).

Če iščete replikacijo MySQL pod CentOS/RHEL 6, sledite temu vodniku Nastavite replikacijo MySQL (Master-Slave) na CentOS/RHEL 6

Namestitev MariaDB 10.1 v CentOS/RHEL 7 in Debian 8/9

Naše preskusno okolje sestavljajo naslednji stroji (oba sta CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Če želite namestiti najnovejšo različico MariaDB, bomo morali v svoje strežnike dodati njihova skladišča. Če uporabljate starejšo različico MariaDB recimo 5.5, razmislite o nadgradnji na najnovejšo različico 10.1 z uporabo spodnjega članka.

  1. Nadgradite MariaDB 5.5 na MariaDB 10.1

Ustvarite datoteko z imenom MariaDB.repo znotraj /etc/yum.repos.d z naslednjo vsebino v sistemih Master in Slave:

# 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

Shranite datoteko in namestite MariaDB na oba strežnika z uporabo yum:

# yum update && yum install MariaDB-server MariaDB-client

Dodajte ključ za preverjanje pristnosti paketov in repozitorija 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'

Opomba: V zgoraj označeni vrstici zamenjajte ime in kodno ime distribucije.

Namestite z ukazom apt-get:

# apt-get update
# apt-get install mariadb-server

Ko ste namestili MariaDB, zaženite postopek mysql_secure_installation na glavnem in pomožnem mestu, v glavni napravi nastavimo vzorčno testno bazo podatkov.

Nastavitev vzorčne zbirke podatkov MySQL na Master

Zdaj bomo v glavnem strežniku nastavili bazo podatkov Zaposleni s spletnega mesta https://github.com/datacharmer/test_db (ki vsebuje nabor podatkov s 4 milijoni zapisov, razporejenih v šest tabel) v dveh preprostih korakih:

Klonirajte repozitorij in z njim uvozite vzorčno bazo podatkov v namestitev MariaDB:

# git clone https://github.com/datacharmer/test_db
# cd test_db
# mysql < employees.sql

Konfiguriranje strežnika MySQL na Master

Če želite konfigurirati glavno enoto, sledite tem korakom:

1. KORAK: Uredite datoteko /etc/my.cnf . V odsek [mysqld] dodajte naslednje štiri vrstice:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

in znova zaženite MariaDB:

# systemctl restart mariadb

2. KORAK: Prijavite se na strežnik MariaDB kot root, ustvarite uporabniškega podrejenega in dodelite potrebne podpore:

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;

Zadnji ukaz (SHOW MASTER STATUS) vrne trenutni položaj v binarnem dnevniku (natančne koordinate, ki kažejo, na kateri točki naj podrejeni začne kopirati:

3. KORAK: Zaprite poziv MariaDB (z exit; ) in z naslednjim ukazom naredite posnetek baze podatkov zaposlenih. Ko pritisnete Enter, boste pozvani, da z mysql_secure_installation vnesete geslo za root, ki ste ga nastavili prej:

# mysqldump -u root -p employees > employees-dump.sql

Ko je dump končan, se znova povežite s strežnikom baze podatkov, da odklenete tabele in nato zapustite:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

4. KORAK: Kopirajte odlagališče v pomožni sistem:

# scp employees-dump.sql [email :/root/ 

5. KORAK: Zaženite postopek mysql_upgrade za nadgradnjo sistemskih tabel (pozvani boste, da vnesete root geslo MariaDB):

# mysql_upgrade -u root -p

6. KORAK: Dovolite storitev zbirke podatkov prek požarnega zidu:

# firewall-cmd --add-service=mysql
# firewall-cmd --add-service=mysql --permanent
# firewall-cmd --reload

Zdaj pa nastavimo suženj.

Konfiguriranje strežnika MySQL na podrejeni napravi

Če želite konfigurirati pomožni sistem, sledite tem korakom:

1. KORAK: ustvarite račun za izvajanje nalog kopiranja. Povežite se z lokalnim strežnikom MariaDB z:

# mysql -u root –p

in vnesite geslo, ki ste ga nastavili prej.

2. KORAK: Ko ste povezani s strežnikom baze podatkov, ustvarite uporabnika in prazno bazo podatkov ter dodelite dovoljenja:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

3. KORAK: Zaprite poziv MariaDB in naložite smetišče, ustvarjeno v glavnem strežniku:

# mysql -u root -p employees < employees-dump.sql

4. KORAK: Uredite datoteko /etc/my.cnf , da podrejenemu strežniku dodelite ID strežnika v razdelku [mysqld] . Upoštevajte, da mora biti celo število drugačno od 1, kot smo v glavnem uporabili 1:

server_id=2
replicate-do-db=employees

Znova zaženite strežnik baze podatkov:

# systemctl restart mariadb

5. KORAK: Zaženite postopek mysql_upgrade za nadgradnjo sistemskih tabel (pozvani boste, da vnesete root geslo MariaDB):

# mysql_upgrade -u root -p

6. KORAK: Ko je smetišče uvoženo v podrejeno enoto, je le nekaj korakov za začetek kopiranja. Prijavite se v bazo podatkov in v pozivu MariaDB zaženite naslednje ukaze. Posebej bodite pozorni na spremenljivki MASTER_LOG_FILE in MASTER_LOG_POS , ki se morata ujemati z vrednostmi, ki jih vrne SHOW MASTER STATUS v 2. KORAKU zgoraj »Konfiguriranje glavne enote«.

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: Zaženite pomožni enoti in preverite njeno stanje, ne da bi zapustili poziv MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Saj ne, da tega zdaj potrebujete, vendar upoštevajte, da lahko podrejenega zaustavite z:

MariaDB [(none)]> STOP SLAVE;

če ukaz SHOW SLAVE STATUS\G; vrne napake. S temi napakami odpravite težave in nato znova zaženite START SLAVE; .

Preizkusite kopiranje zbirke podatkov MySQL/MariaDB

Dodajmo zapis v tabelo zaposlenih v glavnem strežniku:

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');

Nato preverite, ali je bila ta sprememba podvojena v pomožni enoti:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Kot lahko vidite, replikacija deluje pravilno od glavnega do pomožnega.

Povzetek

V tem članku smo razložili, kako namestiti najnovejšo različico MariaDB v CentOS/RHEL 7 in Debian 8/9, ter razpravljali o tem, kako nastaviti replikacijo master-slave z GTID-ji. Za več informacij se lahko obrnete na MariaDB Replication Guide in če imate vprašanja ali komentarje, nas kontaktirajte z uporabo spodnjega obrazca.