MySQL er et relationelt databasestyringssystem, der er et af de mest populære open source-projekter. Selvom MySQL er kendt for sin stabilitet, er det endnu mere pålideligt, hvis kilde-replik-replikering er konfigureret. Ved replikering er én MySQL-server typisk betegnet som kilde . En kilde sender alle databaseændringer og dataopdateringer til en eller flere replikaer databaseservere. MySQL’s datareplikeringsprocedure er fleksibel, og replikaserverne behøver ikke at være permanent forbundet til kilden. Denne vejledning forklarer, hvordan du konfigurerer kilde-replik-datareplikering i MySQL.
Sådan fungerer MySQL-datareplikering
Replikeringsprocessen gemmer først data i kildedatabasen og kopierer dem derefter til eventuelle replikaer. Efter at den har behandlet instruktionen, sporer kildedatabaseserveren ændringen i en binær log. Loggen fungerer som en sekventiel registrering af alle ændringer i databasestrukturen og indholdet. VÆLG
Udsagn registreres ikke, fordi de ikke ændrer databaseindholdet.
Opdateringer sker asynkront, så replikaerne behøver ikke at være forbundet kontinuerligt. Dette står i kontrast til de synkrone arkitekturer i systemer med høj pålidelighed. Hvis realtidssynkronisering er påkrævet, anbefaler MySQL at brugeNDB-klyngen .
Hver replika trækker data fra kilden ved at anmode om indholdet af kildens binære log. Replikaen anvender derefter udsagnene i rækkefølge og afspiller effektivt de begivenheder, der fandt sted på kilden. Hver replika er uafhængig og holder styr på dens aktuelle position med den binære kildelog. Derudover kan hver replika synkronisere med kilden i henhold til sin egen tidsplan. Data kan læses fra enhver af serverne, inklusive replikaerne.
MySQL tillader en høj grad af granularitet. Det er muligt at replikere over bestemte databaser eller endda specifikke tabeller i en database. Standardreplikeringsformatet er Statement Based Replication (SBR), hvor hele SQL-sætningen er replikeret. Dog Rækkebaseret replikering (RBR) er også tilgængelig. Dette format replikerer de rækker, der er blevet ændret. Det er også muligt at konfigurere mere komplicerede mange-til-mange-konfigurationer. Se MySQL-dokumentationen for mere information om de forskellige replikeringsmuligheder.
Bemærk MySQL omtalte tidligere Source-Replica Replication som "Master-Slave Replication". MySQL-organisationen ændrede for nylig terminologien og forklarer deres begrundelse i terminologiopdateringen. Det ældre udtryk "mester" er blevet ændret til "kilde", mens en "slave" nu omtales som en "replika". De gamle termer kan stadig forekomme i visse kommandoer og outputskærme, mens MySQL opdaterer sin kodebase. Denne vejledning bruger MySQL's foretrukne udtryk gennem hele instruktionerne.
Fordele ved MySQL-datareplikering
Aktivering af kilde-replik-replikering giver mange væsentlige fordele i forhold til et ikke-redundant system. Listen nedenfor giver et overblik over nogle fordele:
-
Det er nemt at oprette en live sikkerhedskopi til enhver tid. Fordi replikeringsprocessen er asynkron, kan replikering ske i henhold til enhver tidsplan. Replikaerne behøver ikke at blive holdt synkroniseret med kilden for at fungere pålideligt.
-
Tilføjelse af en replika kan øge oppetiden og pålideligheden for hele systemet. Primær kontrol kan skifte over til replikaen, hvis vedligeholdelse er påkrævet, eller kildedatabasen ikke er tilgængelig.
-
Hver replika giver en anden læsbar forekomst af databasen. Dette gør det muligt for datamining eller analyseprogrammer at forespørge replikaen uden at lægge en ekstra belastning på den originale kildedatabase.
-
Denne arkitektur øger skalerbarheden og ydeevnen. Database læser og
SELECT
Udsagn kan afbalanceres mellem serverne, hvilket reducerer latens. -
Tredjeparter kan få skrivebeskyttet adgang til en database via en replika og kræver ikke længere adgang til kilden. En replikadatabase kan oprettes on-demand, når den er påkrævet, og destrueres, når den ikke længere er nødvendig. Denne teknik øger sikkerheden og sikrer, at det er umuligt at manipulere med de originale data.
Før du begynder
-
Hvis du ikke allerede har gjort det, skal du oprette en Linode-konto og Compute Instance. Se vores vejledninger Kom godt i gang med Linode og Oprettelse af en beregningsinstans.
-
Følg vores guide til konfiguration og sikring af en computerinstans for at opdatere dit system. Du ønsker måske også at indstille tidszonen, konfigurere dit værtsnavn, oprette en begrænset brugerkonto og skærpe SSH-adgang.
-
Du skal have mindst to separate linoder for at konfigurere MySQL-kilde-replik-replikering. En Linode er vært for kildedatabasen, mens en anden node er nødvendig for replikaserveren.
Bemærk Trinene i denne vejledning er skrevet til en ikke-rootbruger. Kommandoer, der kræver forhøjede privilegier, er præfikset medsudo
. Hvis du ikke er bekendt medsudo
kommando, se vejledningen til Linux-brugere og -grupper.
Konfigurer kilde-replik-replikering i MySQL
For at konfigurere kilde-replik-replikering skal MySQL installeres på to separate servere, der kan kommunikere med hinanden. Disse instruktioner er rettet mod Ubuntu-distributionen, men er generelt gældende for alle Linux-distributioner. Processen består af følgende trin:
- Installer MySQL.
- Konfigurer MySQL-kildedatabasen.
- Konfigurer en ny MySQL-bruger til replikaen.
- Forbered MySQL-dataene til replikering.
- Konfigurer MySQL Replica-databasen.
- Importer de replikerede MySQL-data og aktivér replikering.
Installer MySQL
Hvis MySQL ikke allerede er tilgængelig på begge linoder, skal du installere det ved at bruge følgende trin:
-
Opgrader linoderne.
sudo apt-get update &&sudo apt-get upgrade
-
Installer MySQL-serveren og klientapplikationerne på både kilde- og replikaserverne.
sudo apt-get install mysql-server mysql-client -y
-
Konfigurer sikkerhedsindstillingerne, inklusive root-adgangskoden, ved hjælp af
mysql_secure_installation
kommando.sudo mysql_secure_installation
-
Hvis du bruger en firewall såsom
ufw
, sørg for, at det tillader MySQL-trafik igennem. Tilføj følgende regel for at åbne port3306
på firewallen.ufw tillade mysql
Konfigurer MySQL-kildedatabasen
For at aktivere MySQL-replikering skal du redigere nogle variabler i MySQL-hovedkonfigurationsfilen. Foretag følgende ændringer af kildedatabasens konfiguration.
-
Find den primære MySQL-konfigurationsfil på kildedatabaseserveren. Denne fil findes normalt på
/etc/mysql/mysql.conf.d/mysqld.cnf
. Men i tidligere installationer kan det være placeret på/etc/my.cnf
eller/etc/mysql/my.cnf
. Det kunne også refereres fra en af filerne gennem etincludedir
direktiv. -
Åbn MySQL-konfigurationsfilen og skift
bind-adressen
til kildeserverens IP-adresse.- Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
12
bind-adresse =
-
Fjern kommentarer eller tilføj linjerne for
server-id
oglog-bin
. Indstilserver-id
til1
, oglog-bin
til/var/log/mysql/mysql-bin.log
.Bemærk Sørg for
skip_networking
variabel er ikke deklareret nogen steder. Kommenter det, hvis det vises i denne fil. For at replikere en enkelt database skal du tilføje linjenbinlog_do_db =
til filen.- Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
123
server-id =1log_bin =/var/log/mysql/mysql-bin.log
-
Genstart MySQL-tjenesten.
sudo systemctl genstart mysql
-
Bekræft status for MySQL, og sørg for, at den er
aktiv
.sudo systemctl status mysql
mysql.service - MySQL Community ServerLoaded:indlæst (/lib/systemd/system/mysql.service; aktiveret; forudindstillet leverandør:aktiveret)Aktiv:aktiv (kører) siden søn 30-05-2021 13:06 :47 UTC; 1 dag 1 time siden
Konfigurer en ny MySQL-bruger til replikaen
Du skal oprette en ny bruger på kildeserveren for at repræsentere replikaen. Nye brugere oprettes inde i MySQL-skallen.
-
Indtast MySQL-skallen.
sudo mysql -u root -p
-
Tilføj en bruger til replikakontoen ved hjælp af MySQL
CREATE USER
syntaks. Brugernavnet skal bestå af navnet på replikakontoen, en@
symbol og replikaserverens IP-adresse. Vælg en mere sikker adgangskode til kontoen i stedet forREPLICA_PASSWORD
.OPRET BRUGER 'replica_account_name'@'replica_ip_address' IDENTIFICERET MED sha256_password AF 'REPLICA_PASSWORD';
Bemærk For at tillade, at replikaen kan oprette forbindelse fra enhver adresse, skal du angive brugeren som
'replica_account_name'@'%'
.%
symbol repræsenterer enhver adresse eller domæne. Dette giver ekstra fleksibilitet på bekostning af en vis sikkerhed. -
Tildel replikeringsrettigheder til fjernreplikabrugeren.
TILDEL REPLIKATIONSSLAVE PÅ *.* TIL 'replica_konto_navn'@'replica_ip_adresse';
Forbered MySQL-dataene til replikering
På dette tidspunkt er det nødvendigt at tømme og låse kildedatabasen for at iscenesætte dataene til replikering.
-
Forbliv inde i MySQL-skallen og tøm privilegierne for at genindlæse tildelingstabellerne uden at genstarte databasen.
FLUSH PRIVILEGES;
-
Lås databasen for at fryse databasen på et stabilt sted, hvorfra dataene kan eksporteres. Hold MySQL-klienten kørende, indtil du eksporterer databasen. Hvis du indtaster en skrivekommando eller forlader MySQL-skallen, frigives låsen.
SKYL TABELLER MED LÆSELÅS;
Forsigtig Denne kommando blokerer alle commits til kildedatabasen. Eksporter dataene, før du giver kilden lov til at behandle flere commits. Ellers kan replikadatabasen blive beskadiget eller inkonsistent med kildedatabasen. Gennemfør de to resterende trin i dette afsnit så hurtigt som muligt.
-
Bekræft databasens status ved hjælp af følgende kommando. Denne kommando viser den aktuelle logfil sammen med positionen af den sidste post i denne fil. Registrer disse oplysninger, fordi det er nødvendigt for at starte replikering på replikaen senere.
VIS MASTER STATUS;
+-------------------+------------- --+------------------------+------------------------+| Fil | Stilling | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-----------------+----------+--------------+-- ----------------+---------------------------+| mysql-bin.000002 | 1301 | | | |+-------------------+-----------+------------- ---------------+--------------------+1 række i sæt (0,00 sek.)
-
Brug Linux-skallen fra en anden konsol, eksporter databasen ved hjælp af
mysqldump
værktøj. Vælg et mindeværdigt navn til destinationsfilen. Inkluder–master-data
mulighed for at tilføje oplysninger om logfilen og positionen af den aktuelle post til loggen.sudo mysqldump -u root -p --alle-databaser --–master-data> databasecopy.sql
Bemærk For at eksportere en enkelt database skal du inkludere
--opt
mulighed i stedet for -–alle-databaser
. -
Tilbage i den originale MySQL-shell, lås kildedatabasen op.
LÅS TABELLER OP;
-
Afslut MySQL-skallen.
AFSLUT;
-
Kopier den eksporterede databasefil til replikadatabaseserveren ved hjælp af
ftp
,scp
, eller en anden metode til at overføre filen.scp databasecopy.sql [email protected]
Konfigurer MySQL Replica-databasen
Følgende konfiguration skal anvendes på replika-databasekonfigurationen. For at installere MySQL på replikaserveren, se afsnittet Installer MySQL.
-
Åbn MySQL-hovedfilen, normalt placeret på
/etc/mysql/mysql.conf.d/mysqld.cnf
, og ændrebind-adressen
for at matche replikaserverens IP-adresse.- Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
12
bindingsadresse =xx.xx.xx.xx
-
Fjern kommentarer eller tilføj linjerne for
server-id
oglog-bin
.server-id
skal indstilles til2
på replikaen, menslog-bin
variabel skal indstilles til/var/log/mysql/mysql-bin.log
. Tilføj en variabel forrelay-log
og indstil den til/var/log/mysql/mysql-relay-bin.log
.Bemærk Sørg for
skip_networking
variabel er ikke indstillet nogen steder i denne fil. For at replikere en enkelt database skal du tilføje følgende direktiv til filenbinlog_do_db =database_name
. For at konfigurere mere end én replika skal du nummerereserver-id
værdier på en sekventielt stigende måde. For eksempel ville en anden replika have etserver-id
af3
.- Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
1234
server-id =2log_bin =/var/log/mysql/mysql-bin.logrelay-log =/var/log/mysql/mysql-relay-bin.log
-
Genstart MySQL-tjenesten for at inkorporere ændringerne.
sudo systemctl genstart mysql
-
Bekræft status for MySQL, og sørg for, at den er
aktiv
.sudo systemctl status mysql
mysql.service - MySQL-fællesskabsserver indlæst:indlæst (/lib/systemd/system/mysql.service; aktiveret; forudindstillet leverandør:> Aktiv:aktiv (kører) siden man 2021-05-31 16:29 :48 UTC; 6s siden
-
(Valgfrit ) MySQL anbefaler at bruge SSL til at oprette forbindelse til kilden for større sikkerhed. Flere oplysninger om konfiguration af SSL kan findes i MySQL SSL-dokumentationen. RSA-opsætningsværktøjet kan bruges til at fremskynde denne proces.
Importer de replikerede MySQL-data og aktivér replikering
Det næste trin er at importere kopien af databasedataene, indstille replikeringskilden og genstarte replikadatabaseserveren. Replikaen skulle derefter være synkroniseret og klar til brug.
-
Indtast følgende kommando fra Linux-skallen for at importere kildedatabasen. Angiv det databasenavn, der bruges til at eksportere dataene tidligere.
sudo mysql -u root -p
-
Log ind på MySQL-skallen.
sudo mysql -u root -p
-
Stop replikaen.
STOP REPLICA;
-
Indtast
SKIFT REPLIKATIONSKILDE
kommando sammen med følgende detaljer. Erstat IP-adressen på kildedatabaseserveren i stedet forkilde_ip_adresse
. TilSOURCE_USER
ogSOURCE_PASSWORD
, skal du indtaste replikaens brugernavn og adgangskodeoplysninger fra i afsnittet Konfigurer en ny MySQL-bruger til Replika-sektionen. TilSOURCE_LOG_FILE
ogSOURCE_LOG_POS
værdier, skal du indtaste de oplysninger, du har registreret fraVIS MASTER STATUS;
kommando.SKIFT REPLIKATIONSKILDE TIL SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
Bemærk For at bruge SSL til forbindelsen, som MySQL anbefaler, skal du tilføje attributten
SOURCE_SSL=1
til kommandoen. Flere oplysninger om brug af SSL i en kilde-replik-replikeringskontekst kan findes i MySQL-dokumentationen. -
Genstart replikaen.
START REPLICA;
-
Bekræft status for replikaen. Replikaen bør vente på begivenheder, og der bør ikke være nogen
Last_IO_Error
ellerSidste_fejl
begivenheder.Slave_SQL_Running_State
posten skal angive, at replikaen har læst relæloggen.VIS REPLICA STATUS\G
Slave_IO_State:Venter på, at master sender hændelsen Master_Host:178.79.153.39 Master_User:replica Master_Port:3306 Connect_Retry:60 Master_Log_File:mysql-bin.000006 Read_Master_153.0006 Read_Master_1_01_01_01_01_01_01_01_01_01_01_01_01_01_01_01_01_01 Relay_Master_Log_File:mysql-bin.000006 Slave_IO_Running:Yes Slave_SQL_Running:Yes.. Last_Errno:0 Last_Error:.. Seconds_Behind_Master:0Master_SSL_Verify_Server_Cert:No Last_IO_Errno:0 Last_IO_Error:Last_SQL_Errno:0 Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id:1 Master_UUID:5bed9d10-c140-11eb- bc63-f23c92a2a6ac Master_Info_File:mysql.slave_master_info SQL_Delay:0 SQL_Remaining_Delay:NULL Slave_SQL_Running_State:Slave har læst al relælog; venter på flere opdateringer
Test MySQL kilde-replik replikering
Hvis kildedatabasen allerede var udfyldt, før replikaen blev instantieret, er ekstra test påkrævet. I dette tilfælde skal du kontrollere, at de databaser og tabeller, der findes på kilden, er til stede på replikaen, efter at dataene er importeret. I VIS REPLICA STATUS
displayet, Slave_SQL_Running_State
posten skal læse Slaven har læst al relælog
.
For at bekræfte, at replikering sker korrekt, skal du oprette en ny database eller tabel på kilden. Efter et par sekunder bør den nye post være til stede på replikaen. Valider tilstedeværelsen af databasen ved hjælp af SHOW DATABASES;
kommando. For at bekræfte tilstedeværelsen af en tabel, skift til databasen ved hjælp af USE databasename;
, og indtast VIS TABELLER;
. Det er også en god idé at køre VIS REPLICA STATUS
kommando og undersøg outputtet for eventuelle fejl. Last_Error
og Last_IO_Error
felter skal være tomme, og replikaen skal forblive forbundet.
Få mere at vide om MySQL Source-Replica Replication
Den bedste kilde til information om kilde-replik-replikering er den officielle MySQL-dokumentation. Dette afsnit om replikering indeholder mere omfattende information om arkitekturen og installationsprocessen. MySQL-fora kan også være nyttige.
Flere oplysninger
Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af eksternt hostede materialer.
- MySQL-dokumentation