sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql DB backup Ideel praksis

Jeg tænkte over, hvad du skrev, og her er nogle ideer til dig:

  1. Hvis du har brug for backup, som virkelig vil være konsistent til et eller andet tidspunkt, så skal du bruge pg_basebackup eller pg_barman (internt bruger pg_basebackup) - forklaring er i 1. link nedenfor. Seneste pg_basebackup 10 streamer WAL-logfiler, så du sikkerhedskopierer også alle ændringer, der er foretaget under backup. Selvfølgelig tager denne backup kun hele PG-forekomsten. På den anden side låser den ikke noget bord. Og hvis du gør det fra en fjerninstans, forårsager det kun en lille CPU-belastning på PG-instansen, og disk-IO er ikke så stor, som nogle tekster antyder. Se links 4 om mine oplevelser. Restaurering er ret simpel - se link 5.
  2. Hvis du bruger pg_dump, skal du forstå, at du ikke har nogen garanti for, at din backup virkelig er konsistent til tidspunktet - se igen link 1. Der er mulighed for at bruge snapshot af databasen (se link 2 og 3) men selv med det kan du ikke regne med 100 % konsistens. Vi brugte kun pg_dump på vores analytiske database, som kun indlæser nyt 1x om dagen (i gårsdagens partitioner fra produktionsdatabasen). Du kan fremskynde det med parallel indstilling (virker kun for mappe backup-format). Men ulempen er meget højere belastning på PG-instansen - højere CPU-brug, meget højere disk-IO. Selv hvis du kører pg_dump eksternt - i et sådant tilfælde gemmer du kun disk IO til lagring af backup-filer. Plus pg_dump skal placere læselås på tabeller, så det kan kollidere enten med nye inserts eller med replikering (når taget på replika). Men når din database når hundredvis af GB, kan selv parallel dumpning tage timer, og i det øjeblik bliver du alligevel nødt til at skifte til pg_basebackup.
  3. pg_barman er "komfortabel version" af pg_basebackup + det giver dig mulighed for at forhindre tab af data, selv når din PG-instans går ned meget slemt. At sætte det til at virke kræver flere ændringer, men det er bestemt det værd. Du bliver nødt til at indstille WAL-logarkivering (se link 6), og hvis din PG er <10, bliver du nødt til at indstille "max_wal_senders" og "max_replication_slots" (som du alligevel skal bruge til replikering) - alt er i pg-barman manual selvom beskrivelse er ikke ligefrem fantastisk. pg_barman vil streame og gemme WAL-poster selv mellem sikkerhedskopier, så på denne måde kan du være sikker på, at tab af data i tilfælde af meget alvorligt nedbrud næsten ikke vil være noget. Men at få det til at virke kan tage mange timer, fordi beskrivelserne ikke er lige gode. pg-barman udfører både backup og gendannelse med sine kommandoer.

Din database er 5 GB stor, så enhver backupmetode vil være hurtig. Men du skal beslutte dig for, om du har brug for gendannelse på tidspunktet og næsten ingen datatab eller ej - så om du vil investere tid i at indstille pg-barman eller ej.

Links:

  1. PostgreSQL, sikkerhedskopier og alt muligt du skal vide
  2. Anmeldelse til papir:14-Serialiserbar Snapshot Isolation i PostgreSQL - om øjebliksbilleder
  3. Parallel dumping af databaser - eksempel hvordan man bruger snapshot
  4. pg_basebackup-oplevelser
  5. pg_basebackup - gendan tar backup
  6. Arkivering af WAL-logfiler ved hjælp af script



  1. MySQL dynamisk link for at hente den rigtige række

  2. jdbcTemplate er null og kaster null pointer undtagelse

  3. Objekt kan ikke konverteres til en streng i MySQLi PHP

  4. CSV Upload med PHP/MySQL