Qualsiasi problema con backup di filesystem su PostgreSQL?

Sto eseguendo il mio server DB in cloud amazon e ho i file di database in un volume separato EBS. Quando si tratta di operazioni di backup / ripristino, ho trovato infinitamente più semplice eseguire un backup a livello di filesystem piuttosto che un dump di sql perché posso creare backup e ripristinarli quasi immediatamente.

Ci sono possibili problemi che posso affrontare se rispondo con l'utilizzo di backup a livello di file system?

Esecuzione di PostgreSQL 9.1 (aggiornamento a 9.3 più tardi quest'anno) su Ubuntu 12.04

  • Imansible aggiornare postgresql 9.4 -> 9.5beta2 dopo l'aggiornamento di postgis 2.1.6 -> 2.2.0
  • Zabbix non è in grado di connettersi a un database PostgreSQL
  • Come modificare la password postgresql dell'utente utilizzando SQL
  • Come controllare il throughput (query al secondo) di un database?
  • Amazon Auto Scaling + Elastic Load Balancer + Applicazione Web
  • Come gestisci il task di modificare lo schema di un database MySQL di produzione?
  • Postgres vs MySQL: Quale è più difficile da scalare?
  • Come impostare shmall, shmmax, shmni, ecc ... in generale e per postgresql
  • 2 Solutions collect form web for “Qualsiasi problema con backup di filesystem su PostgreSQL?”

    Ci sono possibili problemi che posso affrontare se mi attacco ad utilizzare solo i backup di livello di file system?

    Sì – ma non quelli che stai pensando. Finché si esegue il diritto di copia a livello di file system che è sicuro, si basa su backup fisici che sono il rischio.

    Scrivendo questo, ho notato che il capitolo sui backup di livello del filesystem deve essere aggiornato per indicare gli utenti a pg_basebackup e pg_start_backup() . Mentre tecnicamente parte della replica di streaming e di PITR questi strumenti sono solo modi per rendere copie di livello di file system sicure e coerenti e devono essere indicate in quella parte dei documenti.

    Fare in modo sicuro

    Per la documentazione per il backup del livello di file system PostgreSQL e la creazione di un backup di base è abbastanza sicuro prendere una copia a livello di filesystem finché si seguono le regole date, ovvero fare uno di:

    • Arrestare il server prima del backup e lasciarlo arrestare fino al termine del backup;

    • Utilizzo di pg_basebackup ;

    • Utilizzando pg_start_backup() e pg_stop_backup() e copiate i file generati da pg_stop_backup() ; o

    • Utilizzando un'istantanea del file system atomico e copia dallo snapshot, nel qual caso non si può scrivere su di esso perché è un'istantanea.

    È anche ansible utilizzare pg_basebackup -X stream , che è la mia preferenza. Utilizza il protocollo di replica per eseguire una copia a livello di filesystem, prendendo cura di pg_start_backup() etc per te.

    I backup fisici hanno il grande vantaggio di essere utilizzabili come base per il ripristino Point-in-Time .

    Il caso di istantanea è sicuro perché è proprio come un incidente. Non esiste alcuna scrittura e lo stato del database viene catturato in un momento particolare. I registri di scrittura in scrittura contengono tutti i dati di transazione impegnati, quindi qualsiasi cosa non ancora scurita nell'heap viene ripetuta da WAL durante il ripristino al primo avvio del DB. È come avviarsi dopo un incidente. È necessario solo pg_start_backup() e amici se stai copiando una directory di database in diretta che sta ancora scrivendo mentre lo copia; uno snapshot evita questo.

    Si noti che fare affidamento su istantanee è sicuro solo se l'istantanea è in realtà atomica , cioè acquisisce lo stato del file system in un solo istante nel tempo. È anche sicuro solo se esiste esattamente un volume / file system coinvolto: non è ansible utilizzare due snapshot di due file system separati per eseguire un backup, non saranno dal momento stesso istante. Se stai utilizzando le tabelle, i backup di istantanea non sono per questo motivo – ma pg_basebackup o pg_start_backup() , rsync, pg_stop_backup() sono ancora sicuri.

    Ciò significa che se il file system di database è (diciamo) quattro volumi EBS in una matrix raid md , oppure se si dispone di uno per pg_xlog e uno per il resto del db, non è ansible utilizzare gli snapshot di EBS per eseguire un backup coerente. Se tutto è un volume EBS, uno snapshot EBS è sicuro.

    È anche ansible arrestare PostgreSQL prima di eseguire il backup e avviarlo dopo. Se sei una delle persone fortunate che possono permettersi windows di rest di backup, beh, è ​​cool. Personalmente preferisco il backup caldo comunque.

    rischi

    Il vero problema da preoccuparsi è che quando si prende un backup fisico, stai copiando la struttura del database non controllata e non verificata. Se c'è una corruzione inosservata, potresti avere dei backup che sono molto less utili di quanto pensi. Personalmente vorrei usare anche discariche logiche.

    Un compromesso utile può essere quello di avviare il backup del livello del filesystem dopo aver eseguito la copia, quindi eseguire una pg_dump dal backup del livello del filesystem. Questo assicura che sia leggibile e ti da una copia logica. Se il tuo discorso logico non riesce, l'automazione dovrebbe submit e-mail e urlare per aiuto, perché suggerisce che la copia fisica potrebbe essere danneggiata.

    BTW, ho scritto un gruppo per evitare problemi di perdita di dati / corruzione sul mio vecchio blog un po 'di tempo – vedere Evitare il danneggiamento del database PostgreSQL .

    È ansible eseguire un backup di un file system che è affidabile se si interrompe completamente Postgres, quindi si esegue il backup mentre Postgres viene arrestato. Al termine del backup, avviare Postgres.

    Se Postgres è in esecuzione durante il backup, tutte le scommesse sono distriggerste.

    È meglio fare quanto sopra, oltre ad un backup appropriato "all'interno di Postgres" db.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.