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:
- Sikkerhedskopier kan udføres på slaveserveren uden at påvirke (og blive påvirket af) skriveoperationerne i masteren.
- 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.
- 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# mysqlKonfiguration 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.18og genstart MariaDB:
# systemctl genstart mariadbTRIN 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 gennemmysql_secure_installation
:# mysqldump -u root -p medarbejdere> ansatte-dump.sqlNå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 -pTRIN 6: Tillad databasetjenesten gennem firewallen:
# firewall-cmd --add-service=mysql# firewall-cmd --add-service=mysql --permanent# firewall-cmd --reloadLad 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 –pog 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 medarbejdereTRIN 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=medarbejdereGenstart databaseserveren:
# systemctl genstart mariadbTRIN 5: Kør
mysql_upgrade
procedure for at opgradere systemtabellerne (du bliver bedt om at indtaste MariaDB root-adgangskoden):# mysql_upgrade -u root -pTRIN 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
ogMASTER_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 derefterSTART 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.