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

Snapshot af EBS-volumen brugt til replikering

Selvom det er en god idé at låse databasen og fryse filsystemet, når du starter snapshottet, tager selve API-kaldet til at starte snapshotet en brøkdel af et sekund, så din database og filsystem er ikke låst/frosset længe.

Når det er sagt, er der et par andre overvejelser, du ikke nævnte:

  1. Når du forsøger at oprette låsen på databasen, skal den muligvis vente på, at andre udsagn er færdige, før låsen tildeles. I løbet af denne tid kan din afventende lås muligvis yderligere erklæringer vente, indtil du får og frigiver låsen. Dette kan forårsage afbrydelser i flowet af udsagn på din produktionsdatabase.

  2. Når du har startet oprettelsen af ​​snapshotet, er din applikation/database fri til at bruge filsystemet på volumen, men hvis du har mange skrivninger, kan du opleve høj iowait, nogle gange nok til at skabe en mærkbar opbremsning af din applikation. Grunden til dette er, at baggrundssnapshot-processen skal kopiere en blok til S3, før den tillader en skrivning til den blok på den aktive diskenhed.

Jeg løser det første problem ved at anmode om en lås og time-out, hvis det ikke bliver givet hurtigt. Så venter jeg lidt og fortsætter med at prøve, indtil jeg får låsen. Passende timeouts og forsinkelse af genforsøg kan variere for forskellige databasebelastninger.

Jeg løser det andet problem ved at udføre de hyppige, konsekvente snapshots på slaven i stedet for masteren, præcis som du foreslog. Jeg anbefaler stadig at udføre lejlighedsvise snapshots mod masteren blot for at forbedre dens iboende holdbarhed (en dyb EBS-egenskab), men disse snapshots behøver ikke at udføres med låsning eller frysning, da du ikke kommer til at bruge dem til sikkerhedskopiering.

Jeg anbefaler også brugen af ​​et filsystem, der understøtter skylning og frysning (XFS). Ellers tager du snapshot af låste tabeller i MySQL, som måske endnu ikke engang har alle deres blokke på EBS-volumen endnu, eller andre dele af filsystemet kan være ændret og inkonsekvente i snapshottet.

Hvis du er interesseret, har jeg udgivet open source-software, der udfører den bedste praksis, jeg har indsamlet i forbindelse med at skabe konsistente EBS-snapshots med MySQL og XFS (begge valgfrit).

For at besvare dit sidste spørgsmål vil låsning af tabeller i masteren ikke bryde replikering. I min snapshot-software tømmer jeg også tabellerne med læselås for at sikre, at alt er på den disk, der snapshots, og jeg tilføjer nøgleordet "LOCAL", så flushen ikke replikeres til eventuelle potentielle slaver.



  1. Få rangering af række i OrderBy desc Veltalende forespørgsel, hvordan kan jeg få denne forespørgsel til at fungere i laravel 5.5 veltalende?)

  2. Understøtter SQLDeveloper eksekvering af scripts?

  3. MySQL IF-tilstand i et beregnet felt

  4. Mysql-forespørgsel om at slette duplikerede Wordpress-kommentarer?