sql >> Database teknologi >  >> RDS >> MariaDB

Sådan konfigureres MariaDB (Master-Slave) replikering i CentOS/RHEL 7 og Debian 8/9

Selv når nogle it-folk hører sætningen "Databasereplikering “, forbinder de det ofte med behovet for at have flere kopier af den samme information for at undgå tab af data i tilfælde af hardwarefejl eller datakorruption. Selvom det i et vist omfang er sandt, er der meget mere ved databasereplikering end det almindelige koncept med at sikkerhedskopiere en database og datatilgængelighed.

Blandt andre fordele ved databasereplikering i en master-slave-opsætning kan vi nævne:

  1. Sikkerhedskopier kan udføres på slaveserveren uden at påvirke (og blive påvirket af) skriveoperationerne i masteren.
  2. Ressourcekrævende operationer (såsom dataanalyse) kan udføres på slaven uden at påvirke masterens ydeevne.

I denne artikel vil vi forklare, hvordan du opsætter master-slave-replikering i MariaDB 10.1 . I modsætning til klassisk replikering introducerede MariaDB konceptet Globale transaktions-id'er (GTID'er ) i v10.0 , som gør det nemt at ændre en slave for at oprette forbindelse til og replikere fra en anden master. Derudover registreres slavens tilstand på en nedbrudssikker måde (opdateringer til tilstanden udføres i samme transaktion som opdateringerne af dataene).

Hvis du leder efter MySQL replikering under CentOS/RHEL 6 , følg denne vejledning Opsætning af MySQL (Master-Slave) replikering på CentOS/RHEL 6

Installation af MariaDB 10.1 i CentOS/RHEL 7 og Debian 8/9

Vores testmiljø består af følgende maskiner (begge er CentOS 7 ):

Master:192.168.0.18Slave:192.168.0.19

For at installere den seneste version af MariaDB skal vi tilføje deres arkiver til vores servere. Hvis du bruger ældre version af MariaDB, f.eks. 5.5, kan du overveje at opgradere til seneste 10.1 version ved at bruge nedenstående artikel.

  1. Opgrader MariaDB 5.5 til MariaDB 10.1

I CentOS/RHEL

Opret en fil med navnet MariaDB.repo inde i /etc/yum.repos.d med følgende indhold på både Master og Slave systemer:

# MariaDB 10.1 CentOS repository list - oprettet 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

Gem filen og installer MariaDB på begge servere ved hjælp af yum:

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

I Debian/Ubuntu

Tilføj nøglen til at godkende pakker og MariaDB-lageret:

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

Bemærk :Erstat distributionens navn og kodenavn i den ovenfor fremhævede linje.

Installer ved hjælp af apt-get kommando:

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

Når du har installeret MariaDB, skal du køre mysql_secure_installation procedure på både master og slave, lad os opsætte en prøvetestdatabase i mastermaskinen.

Opsætning af en prøve MySQL-database på Master

Vi vil nu sætte Employees op på masterserveren database fra https://github.com/datacharmer/test_db (som giver et datasæt på 4 millioner poster fordelt på seks tabeller) i to enkle trin:

Klon depotet og brug det til at importere eksempeldatabasen til din MariaDB-installation:

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

Konfiguration af MySQL Server på Master

Følg disse trin for at konfigurere masteren:

TRIN 1: Rediger /etc/my.cnf fil. Under [mysqld] sektion, tilføje følgende fire linjer:

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

og genstart MariaDB:

# systemctl genstart mariadb

TRIN 2: Log på MariaDB-serveren som root, opret brugerslaven og tildel de nødvendige bevillinger:

MariaDB [(ingen)]> OPRET BRUGER 'slave'@'localhost' IDENTIFICERET AF 'SlavePassword';MariaDB [(ingen)]> TILDEL REPLIKATION SLAVE PÅ *.* TIL slave IDENTIFICERET AF 'SlavePassword' MED TILDELINGSMULIGHED;MariaDB [(ingen)]> FLUSH PRIVILEGES;MariaDB [(ingen)]> SKYLLE BORDE MED LÆSELÅS;MariaDB [(ingen)]> VIS MASTER STATUS;

Den sidste kommando (VIS MASTER STATUS ) returnerer den aktuelle position i den binære log (de nøjagtige koordinater, der angiver præcis, på hvilket tidspunkt slaven skal begynde at replikere fra:

TRIN 3: Afslut MariaDB-prompten (med exit; ) og brug følgende kommando til at tage et øjebliksbillede af medarbejderdatabasen. Når du trykker på Enter , vil du blive bedt om at indtaste adgangskoden til root, du konfigurerede tidligere gennem mysql_secure_installation :

# mysqldump -u root -p medarbejdere> ansatte-dump.sql

Når dumpningen er fuldført, skal du oprette forbindelse til databaseserveren igen for at låse tabellerne op og derefter afslutte:

MariaDB [(ingen)]> LÅS TABEL OP;MariaDB [(ingen)]> exit;

TRIN 4: Kopier dumpet til slaven:

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

TRIN 5: Kør mysql_upgrade procedure for at opgradere systemtabellerne (du bliver bedt om at indtaste MariaDB root-adgangskoden):

# mysql_upgrade -u root -p

TRIN 6: Tillad databasetjenesten gennem firewallen:

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

Lad os nu konfigurere slaven.

Konfiguration af MySQL-server på slave

Følg disse trin for at konfigurere slaven:

TRIN 1: Opret kontoen for at udføre replikeringsopgaverne. Opret forbindelse til den lokale MariaDB-server med:

# mysql -u root –p

og indtast den adgangskode, du konfigurerede tidligere.

TRIN 2: Når du er forbundet til databaseserveren, skal du oprette brugeren og en tom database og give tilladelser:

MariaDB [(ingen)]> CREATE DATABASE-medarbejdere;MariaDB [(none)]> GIV ALLE PRIVILEGIER TIL medarbejdere.* TIL 'slave'@'localhost' MED TILSKUDSMULIGHED;MariaDB [(ingen)]> SKYL PRIVILEGIER;

TRIN 3: Afslut MariaDB-prompten og indlæs det dump, der er oprettet på masterserveren:

# mysql -u root -p medarbejdere  

TRIN 4: Rediger /etc/my.cnf fil for at tildele et server ID til slaven under [mysqld] afsnit. Bemærk, at det skal være et andet heltal end 1 , som vi brugte 1 i masteren:

server_id=2replicate-do-db=medarbejdere

Genstart databaseserveren:

# systemctl genstart mariadb

TRIN 5: Kør mysql_upgrade procedure for at opgradere systemtabellerne (du bliver bedt om at indtaste MariaDB root-adgangskoden):

# mysql_upgrade -u root -p

TRIN 6: Når lossepladsen er blevet importeret til slaven, er vi kun et par trin til at begynde at replikere. Log på databasen og kør følgende kommandoer i MariaDB-prompten. Vær særlig opmærksom på MASTER_LOG_FILE og MASTER_LOG_POS variabler, som skal matche de værdier, der returneres af VIS MASTERSTATUS i TRIN 2 af "Konfiguration af masteren" ovenfor.

MariaDB [(ingen)]> 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_CURENTRYN1, MASTER_LOG_POS_=314, MAREGTUS_current=314; /pre> 

TRIN 7: Start slaven og kontroller dens status uden at forlade MariaDB-prompten:

MariaDB [(ingen)]> START SLAVE;MariaDB [(ingen)]> VIS SLAVESTATUS\G;

Ikke at du har brug for dette nu, men bemærk at du kan stoppe slaven med:

MariaDB [(ingen)]> STOP SLAVE;

hvis SHOW SLAVE STATUS\G; kommando returnerer eventuelle fejl. Brug disse fejl til at fejlfinde og kør derefter START SLAVE; for at teste igen.

Test MySQL/MariaDB-databasereplikering

Lad os tilføje en post til medarbejderne tabel i masterserveren:

MariaDB [(ingen)]> INSERT INTO medarbejdere (emp_nr, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Bekræft derefter, at denne ændring blev replikeret i slaven:

MariaDB [(ingen)]> USE-medarbejdere;MariaDB [(ingen)]> VÆLG * FRA medarbejdere WHERE emp_no=500000;

Som du kan se, fungerer replikering korrekt fra master til slave.

Oversigt

I denne artikel har vi forklaret, hvordan du installerer den seneste version af MariaDB i CentOS/RHEL 7 og Debian 8/9, og diskuterede, hvordan man opsætter master-slave-replikering med GTID'er. For mere information kan du henvise til MariaDB Replication Guide, og tøv ikke med at kontakte os ved hjælp af formularen nedenfor, hvis du har spørgsmål eller kommentarer.


  1. Brent Ozar forklarer SQL Server intern og ekstern fragmentering

  2. Hvordan bruger man en tabeltype i en SELECT FROM-sætning?

  3. PARSE() vs CAST() vs CONVERT() i SQL Server:Hvad er forskellen?

  4. java.lang.IllegalStateException:Kunne ikke læse række 0, col -1 fra CursorWindow - Android sqlite problem