sql >> Database >  >> RDS >> MariaDB

MariaDB (Master-Slave)-replicatie instellen in CentOS/RHEL 7 en Debian 8/9

Zelfs als sommige IT-mensen de uitdrukking "Databasereplicatie . horen ", associëren ze het vaak met de noodzaak om meerdere kopieën van dezelfde informatie te hebben om gegevensverlies te voorkomen in het geval van hardwarestoringen of gegevensbeschadiging. Hoewel dat tot op zekere hoogte waar is, houdt databasereplicatie veel meer in dan het algemene concept van het maken van een back-up van een database en de beschikbaarheid van gegevens.

Naast andere voordelen van databasereplicatie in een master-slave-configuratie kunnen we het volgende noemen:

  1. Back-ups kunnen worden gemaakt op de slave-server zonder invloed te hebben op (en beïnvloed te worden door) de schrijfbewerkingen in de master.
  2. Bronintensieve bewerkingen (zoals gegevensanalyse) kunnen op de slave worden uitgevoerd zonder de prestaties van de master te beïnvloeden.

In dit artikel leggen we uit hoe je master-slave-replicatie instelt in MariaDB 10.1 . In tegenstelling tot klassieke replicatie introduceerde MariaDB het concept van Global Transaction ID's (GTID's ) in v10.0 , waarmee u eenvoudig een slave kunt wijzigen om verbinding te maken met en te repliceren vanaf een andere master. Bovendien wordt de status van de slave op een crashveilige manier vastgelegd (updates naar de status worden in dezelfde transactie gedaan als de updates van de gegevens).

Als u op zoek bent naar MySQL replicatie onder CentOS/RHEL 6 , volg deze handleiding MySQL (Master-Slave)-replicatie instellen op CentOS/RHEL 6

MariaDB 10.1 installeren in CentOS/RHEL 7 en Debian 8/9

Onze testomgeving bestaat uit de volgende machines (beide zijn CentOS 7 ):

Master:192.168.0.18Slave:192.168.0.19

Om de nieuwste versie van MariaDB te installeren, moeten we hun repositories aan onze servers toevoegen. Als je een oudere versie van MariaDB, zeg 5.5, gebruikt, overweeg dan om te upgraden naar de nieuwste 10.1-versie met behulp van onderstaand artikel.

  1. Upgrde MariaDB 5.5 naar MariaDB 10.1

In CentOS/RHEL

Maak een bestand met de naam MariaDB.repo binnen /etc/yum.repos.d met de volgende inhoud op beide Master en Slaaf systemen:

# MariaDB 10.1 CentOS-repositorylijst - gemaakt 2016-01-23 14:16 UTC# http://mariadb.org/mariadb/repositories/[mariadb]name =MariaDBbaseurl =http://yum.mariadb.org/ 10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

Sla het bestand op en installeer MariaDB op beide servers met yum:

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

In Debian/Ubuntu

Voeg de sleutel toe om pakketten en de MariaDB-repository te verifiëren:

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

Opmerking :Vervang distributie naam en codenaam in de hierboven gemarkeerde regel.

Installeer met apt-get commando:

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

Nadat u MariaDB hebt geïnstalleerd, voert u de mysql_secure_installation procedure op zowel master als slave, laten we een voorbeeldtestdatabase opzetten in de mastermachine.

Een voorbeeld MySQL-database opzetten op Master

We zullen nu in de hoofdserver de Employees database van https://github.com/datacharmer/test_db (die een dataset van 4 levert miljoen records verdeeld over zes tabellen) in twee eenvoudige stappen:

Kloon de repository en gebruik deze om de voorbeelddatabase naar uw MariaDB-installatie te importeren:

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

MySQL Server configureren op Master

Volg deze stappen om de master te configureren:

STAP 1: Bewerk de /etc/my.cnf het dossier. Onder de [mysqld] sectie, voeg de volgende vier regels toe:

log-binserver_id=1replicate-do-db=employeesbind-address=192.168.0.18

en herstart MariaDB:

# systemctl herstart mariadb

STAP 2: Log in op de MariaDB-server als root, maak de gebruikersslave aan en wijs de nodige toewijzingen toe:

MariaDB [(none)]> MAAK GEBRUIKER 'slave'@'localhost' GEDENTIFICEERD DOOR 'SlavePassword';MariaDB [(none)]> SUBSIDIE REPLICATIE SLAVE OP *.* AAN slaaf GEDENTIFICEERD DOOR 'SlavePassword' MET SUBSIDIEOPTIE;MariaDB [(none)]> FLUSH PRIVILEGES;MariaDB [(geen)]> FLUSH TABELLEN MET LEES LOCK;MariaDB [(geen)]> TOON HOOFDSTATUS;

De laatste commando (TOEN HOOFDSTATUS ) geeft de huidige positie in het binaire logboek terug (de exacte coördinaten die aangeven vanaf welk punt de slave moet beginnen met repliceren:

STAP 3: Verlaat de MariaDB-prompt (met exit; ) en gebruik de volgende opdracht om een ​​momentopname van de werknemersdatabase te maken. Wanneer je op Enter drukt , wordt u gevraagd het wachtwoord voor root in te voeren dat u eerder hebt ingesteld via mysql_secure_installation :

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

Nadat de dump is voltooid, maakt u opnieuw verbinding met de databaseserver om de tabellen te ontgrendelen en sluit u af:

MariaDB [(none)]> ONTGRENDEL TABELLEN;MariaDB [(geen)]> afsluiten;

STAP 4: Kopieer de dump naar de slave:

# scp medewerkers-dump.sql [email protected]:/root/ 

STAP 5: Voer de mysql_upgrade . uit procedure om de systeemtabellen te upgraden (u wordt gevraagd om het MariaDB-rootwachtwoord in te voeren):

# mysql_upgrade -u root -p

STAP 6: Laat de databaseservice door de firewall:

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

Laten we nu de slave configureren.

MySQL-server configureren op slave

Volg deze stappen om de slave te configureren:

STAP 1: Maak het account om de replicatietaken uit te voeren. Maak verbinding met de lokale MariaDB-server met:

# mysql -u root –p

en voer het wachtwoord in dat je eerder hebt ingesteld.

STAP 2: Eenmaal verbonden met de databaseserver, maakt u de gebruiker en een lege database aan en verleent u machtigingen:

MariaDB [(none)]> MAAK DATABASE medewerkers;MariaDB [(none)]> VERLENEN ALLE VOORRECHTEN AAN werknemers.* AAN 'slave'@'localhost' MET SUBSIDIEOPTIE;MariaDB [(none)]> SPOEL VOORRECHTEN;

STAP 3: Verlaat de MariaDB-prompt en laad de dump die op de masterserver is gemaakt:

# mysql -u root -p werknemers  

STAP 4: Bewerk de /etc/my.cnf bestand om een ​​server ID toe te wijzen naar de slaaf onder de [mysqld] sectie. Merk op dat het een ander geheel getal moet zijn dan 1 , zoals we 1 hebben gebruikt in de master:

server_id=2replicate-do-db=employees

Start de databaseserver opnieuw:

# systemctl herstart mariadb

STAP 5: Voer de mysql_upgrade . uit procedure om de systeemtabellen te upgraden (u wordt gevraagd om het MariaDB-rootwachtwoord in te voeren):

# mysql_upgrade -u root -p

STAP 6: Zodra de dump in de slave is geïmporteerd, zijn we nog maar een paar stappen om te beginnen met repliceren. Meld u aan bij de database en voer de volgende opdrachten uit in de MariaDB-prompt. Besteed speciale aandacht aan de MASTER_LOG_FILE en MASTER_LOG_POS variabelen, die moeten overeenkomen met de waarden die worden geretourneerd door SHOW MASTER STATUS in STAP 2 van "De master configureren" hierboven.

MariaDB [(none)]> WIJZIG MASTER NAAR 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_IDSTER_current_pos_GT MASTER_CONNECT_IDSTER_current_pos=10, MASTER_LOG_FILE='master-bin.000001' /pre> 

STAP 7: Start de slave en controleer de status zonder de MariaDB-prompt te verlaten:

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

Niet dat je dit nu nodig hebt, maar houd er rekening mee dat je de slaaf kunt stoppen met:

MariaDB [(none)]> STOP SLAAF;

als de SHOW SLAVE STATUS\G; commando retourneert eventuele fouten. Gebruik deze fouten om problemen op te lossen en voer vervolgens START SLAVE; . uit om opnieuw te testen.

Test MySQL/MariaDB-databasereplicatie

Laten we een record toevoegen aan de werknemers tabel in de hoofdserver:

MariaDB [(none)]> INSERT INTO medewerkers (werknemer, geboortedatum, voornaam, achternaam, geslacht, aanwervingsdatum) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Controleer vervolgens of deze wijziging in de slave is gerepliceerd:

MariaDB [(none)]> GEBRUIK medewerkers;MariaDB [(none)]> SELECTEER * VAN medewerkers WHERE emp_no=500000;

Zoals je kunt zien, werkt de replicatie correct van master naar slave.

Samenvatting

In dit artikel hebben we uitgelegd hoe je de nieuwste versie van MariaDB installeert in CentOS/RHEL 7 en Debian 8/9, en bespraken hoe master-slave-replicatie met GTID's in te stellen. Voor meer informatie kunt u de MariaDB-replicatiegids raadplegen en aarzel niet om contact met ons op te nemen via het onderstaande formulier als u vragen of opmerkingen heeft.


  1. Waarom kan alleen een superuser EXTENSION CREREN wel opslaan, maar niet op Heroku?

  2. Hoe dblink gebruiken (installeren) in PostgreSQL?

  3. SQLite buitenlandse sleutel

  4. String- en NULL-waarden samenvoegen in SQL Server