sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql DB backup Idealiska metoder

Jag tänkte på det du skrev och här är några idéer för dig:

  1. Om du behöver säkerhetskopiering som verkligen kommer att vara konsekvent till någon tidpunkt måste du använda pg_basebackup eller pg_barman (internt använder pg_basebackup) - förklaring finns i 1. länk nedan. Senaste pg_basebackup 10 strömmar WAL-loggar så att du även säkerhetskopierar alla ändringar som gjorts under säkerhetskopieringen. Naturligtvis tar denna backup bara hela PG-instansen. Å andra sidan låser den inte något bord. Och om du gör det från en fjärrinstans orsakar det bara liten CPU-belastning på PG-instansen och disk-IO är inte så stor som vissa texter antyder. Se länkar 4 om mina erfarenheter. Återställningen är ganska enkel - se länk 5.
  2. Om du använder pg_dump måste du förstå att du inte har någon garanti för att din säkerhetskopia verkligen är konsekvent i tid - se återigen länk 1. Det finns en möjlighet att använda ögonblicksbild av databasen (se länkar 2 och 3) men även med den kan du inte räkna med 100 % konsistens. Vi använde pg_dump endast på vår analytiska databas som laddar nytt endast 1x per dag (gårdagens partitioner från produktionsdatabasen). Du kan snabba upp det med parallellalternativet (fungerar endast för katalogsäkerhetskopieringsformat). Men nackdelen är mycket högre belastning på PG-instanser - högre CPU-användning, mycket högre disk-IO. Även om du kör pg_dump på distans - i så fall sparar du bara disk IO för att spara säkerhetskopior. Plus pg_dump måste placera läslås på tabeller så att det kan kollidera antingen med nya inlägg eller med replikering (när det tas på replika). Men när din databas når hundratals GB tar även parallell dumpning timmar och i det ögonblicket skulle du behöva byta till pg_basebackup ändå.
  3. pg_barman är en "komfortabel version" av pg_basebackup + den låter dig förhindra dataförlust även när din PG-instans kraschar mycket hårt. Att ställa in det att fungera kräver fler ändringar men det är definitivt värt det. Du måste ställa in WAL-loggarkivering (se länk 6) och om din PG är <10 måste du ställa in "max_wal_senders" och "max_replication_slots" (som du ändå behöver för replikering) - allt finns i pg-barman manual även om beskrivning är inte direkt bra. pg_barman kommer att strömma och lagra WAL-poster även mellan säkerhetskopior så på detta sätt kan du vara säker på att dataförlust i händelse av en mycket allvarlig krasch kommer att vara nästan ingen. Men att få det att fungera kan ta många timmar eftersom beskrivningar inte är direkt bra. pg-barman gör både säkerhetskopiering och återställning med sina kommandon.

Din databas är 5 GB stor så alla säkerhetskopieringsmetoder går snabbt. Men du måste bestämma dig för om du behöver återhämtning vid tidpunkten och nästan noll dataförlust eller inte - så om du ska investera tid på att ställa in pg-barman eller inte.

Länkar:

  1. PostgreSQL, Backups och allt du behöver veta
  2. Recension för papper:14-Serialisable Snapshot Isolation i PostgreSQL - om ögonblicksbilder
  3. Parallell dumpning av databaser - exempel hur man använder ögonblicksbild
  4. pg_basebackup-upplevelser
  5. pg_basebackup - återställ tar backup
  6. Arkivera WAL-loggar med skript



  1. Oracle-fråga för att få första transaktions-ID baserat på förbrukad utgående transaktion

  2. MySQL Galera-noden startar inte (avbryter med felet 'WSREP:[...]:60:kunde inte nå primärvy:60 (operationen tog timeout)')

  3. Databasschema för chatt:privat och grupp

  4. PostgreSQL Performance - SELECT vs lagrad funktion