Wéi Setup MariaDB (Master-Slave) Replikatioun an CentOS/RHEL 7 an Debian 8/9


Och wann e puer IT Leit den Ausdrock Datebankreplikatioun héieren, assoziéiert se et dacks mat der Bedierfnes fir verschidde Kopien vun der selwechter Informatioun ze hunn fir Datenverloscht am Fall vun Hardwareausfall oder Datekorruptioun ze vermeiden. Och wann dat an engem gewësse Mooss stëmmt, ass et vill méi fir d'Datebankreplikatioun wéi dat gemeinsamt Konzept fir eng Datebank an d'Disponibilitéit ze backen.

Ënner anerem Virdeeler vun der Datebankreplikatioun an engem Master-Sklave-Setup kënne mir nennen:

  1. Backups kënnen um Sklave-Server gemaach ginn ouni d'Schreifoperatioune am Master ze beaflossen (a beaflosst ze ginn).
  2. Ressourceintensiv Operatiounen (wéi Datenanalyse) kënnen um Sklave gemaach ginn ouni d'Leeschtung vum Master ze beaflossen.

An dësem Artikel erkläre mir wéi Dir Master-Sklave Replikatioun a MariaDB 10.1 opstellt. Am Géigesaz zu der klassescher Replikatioun huet d'MariaDB d'Konzept vu Global Transaction IDs (GTIDs) a v10.0 agefouert, wat et erlaabt e Sklave z'änneren fir mat engem anere Master einfach ze verbannen an ze replizéieren. Ausserdeem gëtt den Zoustand vum Sklave op eng Crash-sécher Manéier opgeholl (Aktualiséierunge vum Staat ginn an der selwechter Transaktioun gemaach wéi d'Aktualiséierunge vun den Donnéeën).

Wann Dir no MySQL Replikatioun ënner CentOS/RHEL 6 sicht, befollegt dëse Guide Setup MySQL (Master-Slave) Replikatioun op CentOS/RHEL 6

MariaDB 10.1 an CentOS/RHEL 7 an Debian 8/9 installéieren

Eis Testëmfeld besteet aus de folgende Maschinnen (béid sinn CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Fir déi lescht Versioun vu MariaDB z'installéieren, musse mir hir Repositories op eise Server addéieren. Wann Dir eeler Versioun vu MariaDB benotzt, soen 5.5, betruecht d'Upgrade vun der leschter 10.1 Versioun mam Artikel hei ënnen.

  1. Upgrde MariaDB 5.5 op MariaDB 10.1

Erstellt e Fichier mam Numm MariaDB.repo bannent /etc/yum.repos.d mat den folgenden Inhalter op béide Master a Sklave Systemer:

# 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

Späichert d'Datei an installéiert MariaDB op béide Server mat Yum:

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

Füügt de Schlëssel fir Packagen ze authentifizéieren an de MariaDB Repository:

# 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'

Bemierkung: Ersetzt d'Verdeelungsnumm a Codenumm an der uewen markéierter Linn.

Installéiere mat apt-get Kommando:

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

Wann Dir MariaDB installéiert hutt, fuert d'mysql_secure_installation Prozedur souwuel op Master a Sklave, loosst eis eng Probe-Test-Datebank an der Master-Maschinn opsetzen.

Eng Sample MySQL Datebank op Master opsetzen

Mir wäerten elo am Master-Server d'Datebank Employéen vun https://github.com/datacharmer/test_db opsetzen (wat en Dataset vu 4 Millioune Rekorder iwwer sechs Dëscher verdeelt gëtt) an zwee einfache Schrëtt:

Klon de Repository a benotzt se fir d'Probe-Datebank op Är MariaDB Installatioun z'importéieren:

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

MySQL Server op Master konfiguréieren

Fir de Master ze konfiguréieren, befollegt dës Schrëtt:

SCHRËTT 1: Änneren /etc/my.cnf Datei. Ënnert der [mysqld] Sektioun, füügt déi folgend véier Zeilen derbäi:

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

a restart MariaDB:

# systemctl restart mariadb

SCHRËTT 2: Mellt Iech op de MariaDB Server als Root un, erstellt de Benotzer Sklave a gitt déi néideg Subventiounen:

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;

De leschte Kommando (WEISEN MASTER STATUS) gëtt déi aktuell Positioun am binäre Logbuch zréck (déi exakt Koordinaten, déi genau uginn op wéi engem Punkt de Sklave sollt replizéieren vun:

SCHRËTT 3: Gitt d'MariaDB-Prompt aus (mat exit;) a benotzt de folgende Kommando fir e Snapshot vun der Mataarbechterdatenbank ze maachen. Wann Dir op Enter klickt, gitt Dir opgefuerdert d'Passwuert fir d'Root ze tippen, déi Dir virdru ageriicht hutt duerch mysql_secure_installation:

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

Nodeems den Dump fäerdeg ass, verbënnt erëm mam Datebankserver fir d'Dëscher ze spären an dann eraus:

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

SCHRËTT 4: Kopéiert den Dump op de Sklave:

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

SCHRËTT 5: Fëllt d'mysql_upgrade Prozedur aus fir d'Systemtabellen z'aktualiséieren (Dir gitt opgefuerdert d'MariaDB Root Passwuert anzeginn):

# mysql_upgrade -u root -p

SCHRËTT 6: Erlaabt den Datebankservice duerch d'Firewall:

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

Loosst eis de Sklave konfiguréieren.

MySQL Server op Sklave konfiguréieren

Fir de Sklave ze konfiguréieren, befollegt dës Schrëtt:

SCHRËTT 1: Erstellt de Kont fir d'Replikatiounsaufgaben auszeféieren. Connectéiert mam lokalen MariaDB Server mat:

# mysql -u root –p

a gitt d'Passwuert dat Dir virdru ageriicht hutt.

SCHRËTT 2: Wann Dir mam Datebankserver verbonne sidd, erstellt de Benotzer an eng eidel Datebank, a gitt Permissiounen:

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

SCHRËTT 3: Gitt d'MariaDB Prompt aus a luet den Dump erstallt am Master Server:

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

SCHRËTT 4: Änneren d'/etc/my.cnf Datei fir e Server ID dem Sklave ënner der Rubrik [mysqld] ze ginn. Notéiert datt et en anert Ganzt muss sinn wéi 1, well mir 1 am Master benotzt hunn:

server_id=2
replicate-do-db=employees

Restart den Datebankserver:

# systemctl restart mariadb

SCHRËTT 5: Fëllt d'mysql_upgrade Prozedur aus fir d'Systemtabellen z'aktualiséieren (Dir gitt opgefuerdert d'MariaDB Root Passwuert anzeginn):

# mysql_upgrade -u root -p

SCHRËTT 6: Wann den Dump an de Sklave importéiert gouf, si mir nëmmen e puer Schrëtt fir ze replizéieren. Loggt Iech op d'Datebank a lafen déi folgend Kommandoen an der MariaDB Prompt. Opgepasst besonnesch op MASTER_LOG_FILE an MASTER_LOG_POS Variabelen, déi mat de Wäerter passen, déi vum SHOW MASTER STATUS am SCHRËTT 2 vum Configuring the Master hei uewen zréckkomm sinn.

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;

SCHRËTT 7: Start de Sklave a kontrolléiert säi Status ouni d'MariaDB Prompt auszeschléissen:

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

Net datt Dir dëst elo braucht, awer bemierkt datt Dir de Sklave stoppen kënnt mat:

MariaDB [(none)]> STOP SLAVE;

wann de Kommando SHOW SLAVE STATUS\G; all Feeler zréckkënnt. Benotzt dës Feeler fir ze léisen an dann START SLAVE; lafen fir erëm ze testen.

Test MySQL/MariaDB Datebank Replikatioun

Loosst eis e Rekord un den Employéen Dësch am Master Server addéieren:

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

Da kontrolléiert datt dës Ännerung am Sklave replizéiert gouf:

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

Wéi Dir kënnt gesinn, funktionnéiert d'Replikatioun korrekt vu Meeschter zu Sklave.

Resumé

An dësem Artikel hu mir erkläert wéi Dir déi lescht Versioun vu MariaDB an CentOS/RHEL 7 an Debian 8/9 installéiere wëllt, an diskutéiert wéi Dir Master-Sklave Replikatioun mat GTIDs opstellt. Fir méi Informatioun, wëllt Dir vläicht op de MariaDB Replikatiounsguide verweisen, an zéckt net eis ze kontaktéieren andeems Dir de Formulaire hei drënner benotzt wann Dir Froen oder Kommentarer hutt.