sql >> Database teknologi >  >> RDS >> Mysql

Sådan konfigureres kilde-replikering i MySQL

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

  1. 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.

  2. 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.

  3. 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 med sudo . Hvis du ikke er bekendt med sudo 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:

  1. Installer MySQL.
  2. Konfigurer MySQL-kildedatabasen.
  3. Konfigurer en ny MySQL-bruger til replikaen.
  4. Forbered MySQL-dataene til replikering.
  5. Konfigurer MySQL Replica-databasen.
  6. 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:

  1. Opgrader linoderne.

     sudo apt-get update &&sudo apt-get upgrade 
  2. Installer MySQL-serveren og klientapplikationerne på både kilde- og replikaserverne.

     sudo apt-get install mysql-server mysql-client -y 
  3. Konfigurer sikkerhedsindstillingerne, inklusive root-adgangskoden, ved hjælp af mysql_secure_installation kommando.

     sudo mysql_secure_installation 
  4. 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 port 3306 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.

  1. 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 et includedir direktiv.

  2. Åbn MySQL-konfigurationsfilen og skift bind-adressen til kildeserverens IP-adresse.

    Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
    12 
    bind-adresse =  
  3. Fjern kommentarer eller tilføj linjerne for server-id og log-bin . Indstil server-id til 1 , og log-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 linjen binlog_do_db = til filen.
    Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
    123 
    server-id =1log_bin =/var/log/mysql/mysql-bin.log  
  4. Genstart MySQL-tjenesten.

     sudo systemctl genstart mysql 
  5. 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.

  1. Indtast MySQL-skallen.

     sudo mysql -u root -p 
  2. 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 for REPLICA_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.
  3. 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.

  1. Forbliv inde i MySQL-skallen og tøm privilegierne for at genindlæse tildelingstabellerne uden at genstarte databasen.

     FLUSH PRIVILEGES; 
  2. 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.
  3. 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.)
  4. 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 .
  5. Tilbage i den originale MySQL-shell, lås kildedatabasen op.

     LÅS TABELLER OP; 
  6. Afslut MySQL-skallen.

     AFSLUT; 
  7. 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.

  1. Åbn MySQL-hovedfilen, normalt placeret på /etc/mysql/mysql.conf.d/mysqld.cnf , og ændre bind-adressen for at matche replikaserverens IP-adresse.

    Fil:/ etc/mysql/mysql.conf.d/mysqld.cnf
    12 
    bindingsadresse =xx.xx.xx.xx  
  2. Fjern kommentarer eller tilføj linjerne for server-id og log-bin . server-id skal indstilles til 2 på replikaen, mens log-bin variabel skal indstilles til /var/log/mysql/mysql-bin.log . Tilføj en variabel for relay-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 filen binlog_do_db =database_name . For at konfigurere mere end én replika skal du nummerere server-id værdier på en sekventielt stigende måde. For eksempel ville en anden replika have et server-id af 3 .
    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  
  3. Genstart MySQL-tjenesten for at inkorporere ændringerne.

     sudo systemctl genstart mysql 
  4. 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 
  5. (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.

  1. 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  
  2. Log ind på MySQL-skallen.

     sudo mysql -u root -p 
  3. Stop replikaen.

     STOP REPLICA; 
  4. Indtast SKIFT REPLIKATIONSKILDE kommando sammen med følgende detaljer. Erstat IP-adressen på kildedatabaseserveren i stedet for kilde_ip_adresse . Til SOURCE_USER og SOURCE_PASSWORD , skal du indtaste replikaens brugernavn og adgangskodeoplysninger fra i afsnittet Konfigurer en ny MySQL-bruger til Replika-sektionen. Til SOURCE_LOG_FILE og SOURCE_LOG_POS værdier, skal du indtaste de oplysninger, du har registreret fra VIS 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.
  5. Genstart replikaen.

     START REPLICA; 
  6. Bekræft status for replikaen. Replikaen bør vente på begivenheder, og der bør ikke være nogen Last_IO_Error eller Sidste_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

  1. Overtrædelse af integritetsbegrænsning:1452 Kan ikke tilføje eller opdatere en underordnet række:

  2. Markørbaserede poster i PostgreSQL

  3. er der en PRODUKT funktion ligesom der er en SUM funktion i Oracle SQL?

  4. Topsvar på 5 brændende spørgsmål om COALESCE-funktion i SQL Server