web-dev-qa-db-fra.com

mise à niveau de postgres 9.1 vers 9.3 sur le serveur ubuntu

J'ai mon serveur de production (ubuntu 13.10) fonctionnant avec postgresql 9.1.

Je veux utiliser quelques fonctionnalités de 9.3, donc je veux mettre à jour.

Quelqu'un pourrait-il m'aider avec la mise à niveau de la version 9.1 vers la version 9.3 pour qu'il y ait un temps d'arrêt de 30 minutes maximum. ou alors?

La principale préoccupation est d'éviter une perte de données ou une redondance de fichiers.

27
Ram Kumar

Il existe essentiellement trois façons de mettre à niveau PostgreSQL à partir de différentes versions principales (par exemple, 9.1 à 9.3).

Mise à niveau avec pg_dump

Le premier, et recommandé si possible, est de faire un vidage de l'ancienne version (9.1) en utilisant le binaire de la version plus récente (9.3) et restaurez-le sur un nouveau cluster créé à partir de la version la plus récente.

Cette approche est, en général, la plus lente, mais aussi la plus réalisable. Une astuce pour accélérer le processus consiste à utiliser la concurrence. Pour effectuer un vidage avec des travaux parallèles, vous pouvez effectuer:

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

Vous devrez le faire pour chaque base de données dont vous disposez, ajustez --jobs=4 valeur à n'importe quelle valeur (testez certaines valeurs de 2 au nombre de cœurs, et voyez ce qui donne une meilleure vitesse). De plus, pendant cette phase, personne ne doit être connecté à la base de données, toute modification entraînera un vidage corrompu (en raison de l'option non sécurisée --no-synchronized-snapshots).

Après cela, vous pouvez restaurer votre vidage dans la nouvelle instance à l'aide de pg_restore:

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

Après cela, il est recommandé d'exécuter ANALYZE sur votre base de données:

$ vacuumdb --analyze-only mydatabase

(si vous avez le temps, exécutez uniquement --analyze pour également VACUUM la base de données et mettre à jour les cartes de visibilité)

Mise à niveau avec pg_upgrade

Une autre option consiste à utiliser le contrib pg_upgrade . En utilisant le --link méthode, il fournit un moyen très rapide de mettre à niveau PostgreSQL.

Avant d'utiliser, vous devez faire une sauvegarde de l'ensemble du répertoire de données, car dans --link, en cas de problème, vous risquez de perdre les deux données (nouvelles et anciennes). Lisez également l'intégralité de la documentation et spécialement les notes en bas (il y a quelques limitations pour pg_upgrade).

MISE À JOUR: Veuillez utiliser le --check avant d'exécuter la commande définitive. En outre, pour les grandes bases de données, il est recommandé d'exécuter cette commande dans une session d'écran.

Mettre à niveau à l'aide d'un outil de réplication basé sur un déclencheur

Une autre option pour mettre à niveau une version consiste à utiliser un outil de réplication basé sur le déclencheur. Comme Slony, Bucardo et Londiste.

C'est l'option qui nécessite le moins de temps d'arrêt possible, mais c'est la plus difficile à travailler.

Pour ce faire, vous devez créer un maître-esclave où le maître est votre version actuelle (9.1) et l'esclave est la nouvelle version (9.3). Vous devez ensuite attendre la première synchronisation (avec le système toujours en production), après cela, vous fermez toutes les personnes connectées à la base de données (le temps d'arrêt commence ici), attendez que l'esclave se rattrape, promouvez-le (l'esclave) à maîtriser et redirige tous les clients/applications vers cette nouvelle version. Et tu as fini.

La documentation de Slony fournit une étape par étape pour mettre à niveau PostgreSQL à l'aide de Slony .

Lequel choisir

Eh bien, comme toujours cela dépend, en reprenant:

  • Le dump + restore est le plus fiable, mais généralement le plus lent (le parallélisme peut cependant donner de très bons résultats)
  • Le pg_upgrade est l'une des meilleures options pour les petits temps d'arrêt (si vous pouvez utiliser, voir les limitations), cela ne prend souvent que quelques minutes, même pour les grandes bases de données
  • La réplication de déclenchement est sans aucun doute celle qui donne le moins de temps d'arrêt possible (près de zéro), mais elle est vraiment difficile à réaliser et je recommande uniquement aux personnes expérimentées (à la fois sur PostgreSQL et sur l'outil de réplication).

J'espère que je pourrais aider. Bonne chance.

28
MatheusOl

Suivez ces étapes pour mettre à niveau PostgreSQL 9.1 vers 9.3:

  1. Créez d'abord un fichier /etc/apt/sources.list.d/pgdg.list avec le contenu suivant pour ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
    
  2. Ajouter la clé en cours d'exécution suivante:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add -
    
  3. Installez les outils de développement avec postgres:

    Sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
    
  4. Pour confirmer notre installation, nous allons entrer "Sudo pg_lsclusters" et voir nos deux versions de PostgreSQL en cours d'exécution.

  5. Arrêtez le service Postgressql:

    Sudo service postgresql stop
    
  6. Supprimez le cluster 9.3 par défaut créé par l'installation 9.3.

    Sudo pg_dropcluster --stop 9.3 main
    
  7. Créez un nouveau cluster 9.3 à partir du cluster 9.1 existant.

    Sudo pg_upgradecluster 9.1 main
    
  8. Confirmez que le nouveau cluster se charge et que nous exécutons PostgreSQL 9.3.

    Sudo service postgresql start 9.3
    
  9. Si tout fonctionne, passez au cluster 9.1.

    pg_dropcluster --stop 9.1 main
    

pour plus d'informations se référer à ce lien

7
Snehal Parmar

Cela pourrait être très utile:

https://Gist.github.com/ibussieres/11262268

C'est pour 12.04, mais je suppose que c'est assez transférable.

0
IanBussieres