actualización de postgres 9.1 a 9.3 en el servidor ubuntu

27

Tengo mi servidor de producción (ubuntu 13.10) ejecutándose con postgresql 9.1.

Quiero usar algunas características de 9.3, por lo tanto, quiero actualizar.

¿Podría alguien ayudarme con la actualización de 9.1 a 9.3 para que haya un tiempo de inactividad de no más de 30 minutos. ¿más o menos?

La principal preocupación es evitar la pérdida de datos o la redundancia de archivos.

Ram Kumar
fuente
2
Los documentos de Postgres son realmente buenos. google.co.uk/#q=postgres+upgrade+from+9.1+to+9.3
Philᵀᴹ
No soy un DBA per se (tengo que cuidar la instalación extraña de Postgres e incluso mysql más extraño;}), y esta publicación es antigua, pero ¿por qué usarías cualquier versión de Ubuntu X.10 para prod en lugar de X.04? LTS?
Tink

Respuestas:

28

Básicamente, existen tres formas de actualizar PostgreSQL desde diferentes versiones principales (por ejemplo, 9.1 a 9.3).

Actualización con pg_dump

El primero, y recomendado si es posible, es hacer un volcado de la versión anterior (9.1) utilizando el binario de la versión más reciente (9.3) y restaurarlo en un nuevo clúster creado con la versión más reciente.

Este enfoque es, en general, el más lento, pero también el más factible. Un consejo para hacerlo más rápido es usar la concurrencia. Para volcar con trabajos paralelos, puede hacer:

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

Tendrá que hacerlo para cada base de datos que tenga, ajustar el --jobs=4valor a cualquier valor (pruebe algunos valores desde 2 hasta el número de núcleos, y vea cuál proporciona una mejor velocidad). Además, durante esta fase, nadie debe estar conectado a la base de datos, cualquier modificación resultará en un volcado corrupto (debido a la opción no segura --no-synchronized-snapshots).

Después de eso, puede restaurar su volcado en la nueva instancia usando pg_restore:

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

Después de eso, se recomienda ejecutar ANALYZEen su base de datos:

$ vacuumdb --analyze-only mydatabase

(si usted puede permitirse el tiempo, ejecutar sólo --analyzea también VACUUMla base de datos y actualizar los mapas de la visibilidad)

Actualización con pg_upgrade

Otra opción, es usar el contribpg_upgrade . Usando el --linkmétodo, proporciona una forma realmente rápida de actualizar PostgreSQL.

Antes de usarlo, debe hacer una copia de seguridad de todo el directorio de datos, porque en el --linkmodo, si algo sale mal, puede perder ambos datos (nuevos y antiguos). Además, lea los documentos completos y especialmente las notas en la parte inferior (existen algunas limitaciones para pg_upgrade).

ACTUALIZACIÓN: utilice la --checkopción antes de ejecutar el comando definitivo. Además, para bases de datos grandes es recomendable ejecutar este comando en una sesión de pantalla.

Actualice utilizando una herramienta de replicación basada en disparador

Otra opción para actualizar una versión es usar una herramienta de replicación basada en el disparador. Como Slony, Bucardo y Londiste.

Esta es la opción que requiere el menor tiempo de inactividad posible, pero es la más difícil de trabajar.

Para hacerlo, debe crear un maestro-esclavo donde el maestro sea su versión actual (9.1) y el esclavo sea la nueva versión (9.3). Luego, espera la primera sincronización (con el sistema aún en producción), luego cierra todos los conectados a la base de datos (el tiempo de inactividad comienza aquí), espera a que el esclavo se ponga al día, promueve (el esclavo) para dominar y redirigir todos los clientes / aplicaciones a esta nueva versión. Y tu estas listo.

La documentación de Slony proporciona un paso a paso para actualizar PostgreSQL usando Slony .

Cuál elegir

Bueno, como siempre depende, resumiendo:

  • El volcado + restauración es el más confiable, pero generalmente el más lento (el paralelismo puede dar resultados bastante buenos)
  • Pg_upgrade es una de las mejores opciones para poco tiempo de inactividad (si puede usarlo, vea las limitaciones), a menudo solo lleva unos minutos, incluso para grandes bases de datos
  • La replicación desencadenante es, sin duda, la que proporciona el menor tiempo de inactividad posible (casi cero), pero es realmente difícil de lograr y lo recomiendo solo para personas con experiencia (tanto en PostgreSQL como en la herramienta de replicación).

Espero poder ayudar Buena suerte.

MatheusOl
fuente
¿Funcionará pg_upgrade también de 8.4.17 a 9.3?
JohnMerlino
@JohnMerlino: sí, pg_upgrade puede actualizar desde 8.3 o versiones superiores (incluye 8.3, 8.4, 9.0, 9.1, 9.2, ...).
MatheusOl
"usar el binario de la versión más reciente (9.3)" podría no ser tan necesario. Al menos lo tengo funcionando sin hacer ese bit.
theicfire
@theicfire en realidad depende de ambas versiones (la antigua y la nueva), puede o no funcionar. De hecho, funcionará en la mayoría de los casos, a excepción de algunos mensajes de error que generalmente pueden invocarse ... ¡Sin embargo, el procedimiento oficial es usar el binario de la versión más nueva!
MatheusOl
Es posible que pueda usar pg_dumpallpara volcar todas las bases de datos de una vez.
Matthieu
7

Siga estos pasos para actualizar Postgres 9.1 a 9.3:

  1. Primero cree un archivo /etc/apt/sources.list.d/pgdg.list con los siguientes contenidos para ubuntu:

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. Añadir clave ejecutando siguiente:

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. Instalar herramientas de desarrollador con postgres:

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. Para confirmar nuestra instalación, ingresaremos "sudo pg_lsclusters" y veremos nuestras dos versiones de PostgreSQL en ejecución.

  5. Detener el servicio Postgressql:

    sudo service postgresql stop
  6. Elimine el clúster 9.3 predeterminado creado por la instalación 9.3.

    sudo pg_dropcluster --stop 9.3 main
  7. Cree un nuevo clúster 9.3 a partir del clúster 9.1 existente.

    sudo pg_upgradecluster 9.1 main
  8. Confirme que se carga el nuevo clúster y que estamos ejecutando PostgreSQL 9.3.

    sudo service postgresql start 9.3
  9. Si todo funciona, baje al clúster 9.1.

    pg_dropcluster --stop 9.1 main

Para más información consulte este enlace

Snehal Parmar
fuente