aggiornamento da Postgres 9.1 a 9.3 sul server Ubuntu


27

Ho il mio server di produzione (Ubuntu 13.10) in esecuzione con Postgresql 9.1.

Voglio usare alcune funzionalità di 9.3, quindi voglio aggiornare.

Qualcuno potrebbe aiutarmi con l'aggiornamento da 9.1 a 9.3 in modo che ci sia un tempo di inattività di non più di 30 minuti. o così?

La preoccupazione principale è prevenire la perdita di dati o la ridondanza dei file.


2
I documenti di Postgres sono davvero buoni. google.co.uk/#q=postgres+upgrade+from+9.1+to+9.3
Philᵀᴹ

Non sono un DBA di per sé (devo occuparmi della strana installazione di Postgres e ancora di più mysql;}), e questo post è vecchio, ma perché dovresti usare qualsiasi versione di Ubuntu X.10 per prod piuttosto che un X.04 È?
tink

Risposte:


28

Esistono sostanzialmente tre modi per aggiornare PostgreSQL da diverse versioni principali (ad es. Da 9.1 a 9.3).

Aggiornamento con pg_dump

Il primo, e se possibile consigliato, è fare un dump della versione precedente (9.1) usando il binario della versione più recente (9.3) e ripristinarlo su un nuovo cluster creato con la versione più recente.

Questo approccio è, generalmente, il più lento, ma anche il più possibile. Un consiglio per renderlo più veloce è usare la concorrenza. Per eseguire il dump con lavori paralleli, è possibile:

$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

Dovrai farlo per ogni database che hai, adattare il --jobs=4valore a qualsiasi valore (prova alcuni valori da 2 a numero di core e vedi quale dà una migliore velocità). Inoltre, durante questa fase, nessuno dovrebbe essere collegato al database, qualsiasi modifica comporterà un dump danneggiato (a causa dell'opzione non sicura --no-synchronized-snapshots).

Successivamente, è possibile ripristinare il dump nella nuova istanza utilizzando pg_restore:

$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

Successivamente, si consiglia di eseguire ANALYZEsul database:

$ vacuumdb --analyze-only mydatabase

(se si può permettersi il tempo, eseguito solo --analyzeal anche VACUUMil database e aggiornare la visibilità mappe)

Aggiornamento con pg_upgrade

Un'altra opzione è quella di utilizzare il contribpg_upgrade . Utilizzando il --linkmetodo fornisce un modo molto veloce per aggiornare PostgreSQL.

Prima di utilizzare devi fare un backup dell'intera directory di dati, perché in --linkmodalità, se qualcosa va storto, potresti perdere entrambi i dati (vecchi e nuovi). Inoltre, leggi l'intero documento e specialmente le note in basso (ci sono alcune limitazioni per pg_upgrade).

AGGIORNAMENTO: utilizzare l' --checkopzione prima di eseguire il comando definitivo. Inoltre, per database di grandi dimensioni è consigliabile eseguire questo comando in una sessione dello schermo.

Esegui l'aggiornamento utilizzando uno strumento di replica basato su trigger

Un'altra opzione per aggiornare una versione è l'utilizzo di uno strumento di replica basato sul trigger. Come Slony, Bucardo e Londiste.

Questa è l'opzione che richiede il minor tempo di inattività possibile, ma è la più difficile su cui lavorare.

Per fare ciò è necessario creare un master-slave in cui il master è la versione corrente (9.1) e lo slave è la nuova versione (9.3). Quindi, attendi la prima sincronizzazione (con il sistema ancora in produzione), dopodiché chiudi tutti gli utenti collegati al database (il tempo di inattività inizia qui), attendi che lo slave riesca a raggiungerlo, promuovilo (lo slave) per masterizzare e reindirizzare tutti i client / applicazioni a questa nuova versione. E hai finito.

La documentazione di Slony fornisce una procedura dettagliata per aggiornare PostgreSQL usando Slony .

Quale scegliere

Bene, come sempre dipende, riprendendo:

  • Il dump + restore è il più affidabile, ma generalmente il più lento (il parallelismo può dare buoni risultati)
  • Pg_upgrade è una delle migliori opzioni per i tempi di inattività ridotti (se è possibile utilizzare, vedere le limitazioni), spesso sono necessari solo pochi minuti, anche per database di grandi dimensioni
  • La replica del trigger è senza dubbio quella che offre il minor tempo di inattività possibile (vicino allo zero), ma è davvero difficile da realizzare e raccomando solo a persone esperte (sia su PostgreSQL sia sullo strumento di replica).

Spero di poterti aiutare. In bocca al lupo.


Pg_upgrade funzionerà anche dalle 8.4.17 alle 9.3?
John Merlino,

@JohnMerlino: sì, pg_upgrade può eseguire l'aggiornamento da versioni 8.3 o successive (include 8.3, 8.4, 9.0, 9.1, 9.2, ...).
Matheus il

"Usare il binario della versione più recente (9.3)" potrebbe non essere così necessario .. Almeno ce l'ho fatta a funzionare senza farlo.
theicfire,

@theicfire in realtà dipende da entrambe le versioni (la vecchia e la nuova), potrebbe funzionare o meno. In effetti funzionerà nella maggior parte dei casi, ad eccezione di alcuni messaggi di errore che di solito possono essere importati ... La procedura ufficiale è usare il binario della versione più recente!
Matheus, il

Potresti essere in grado di utilizzare pg_dumpallper scaricare tutti i database in una volta sola.
Matthieu,

7

Seguire questi passaggi per aggiornare Postgres da 9.1 a 9.3:

  1. Innanzitutto creare un file /etc/apt/sources.list.d/pgdg.list con i seguenti contenuti per ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. Aggiungi chiave in esecuzione come segue:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Installa gli strumenti per sviluppatori con Postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. Per confermare la nostra installazione, inseriremo "sudo pg_lsclusters" e vedremo in esecuzione le nostre due versioni di PostgreSQL.

  5. Interrompere il servizio Postgressql:

    sudo service postgresql stop
  6. Elimina il cluster 9.3 predefinito creato dall'installazione 9.3.

    sudo pg_dropcluster --stop 9.3 main
  7. Creare un nuovo cluster 9.3 dal cluster 9.1 esistente.

    sudo pg_upgradecluster 9.1 main
  8. Conferma che il nuovo cluster viene caricato e stiamo eseguendo PostgreSQL 9.3.

    sudo service postgresql start 9.3
  9. Se tutto funziona, scendi al cluster 9.1.

    pg_dropcluster --stop 9.1 main

per ulteriori informazioni consultare questo link


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.