Solución completa para actualizar PostgreSQL en el servidor de producción Debian

Solución completa para actualizar PostgreSQL en el servidor de producción Debian

Estoy usando Debian 6 (Squeeze) en producción para un par de sitios web. Decidí usar backports de PostgreSQL para poder usar las funciones de PostgreSQL 9.0. Pensé que seguiría siendo 9.0 y recibiría actualizaciones de esa versión principal.

Desafortunadamente, los backports de Squueze se actualizaron a PostgreSQL 9.1, por lo que probablemente no recibiré actualizaciones a 9.0.

Estoy planeando actualizar a 9.1 pero sé que no se hace automáticamente.

He leído sobre pg_upgrade oficial y pg_upgradecluster de Debian, pero agradecería una guía completa para actualizar.

  1. ¿Cuáles son los pasos a seguir (primero apt-get install postgresql, luego pg_upgradecluster, luego eliminar el clúster antiguo)? Una lista de pasos estaría bien.
  2. ¿Cuáles son los posibles escenarios de falla?
  3. ¿Cómo prepararse para los fracasos y reaccionar ante ellos?

Puedo detener la base de datos solo por un par de horas, así que quiero estar preparado.

Respuesta1

Es bastante difícil brindarle un proceso de actualización paso a paso que se adapte a su situación/entorno.
Intenté abordar algunos de los aspectos más destacados a continuación, pero realmente necesitas adaptar el proceso a tu entorno.


Paso cero: decide si necesitas actualizar. Postgres 9.1 trae replicación sincrónica y muchas otras cosas interesantes que son útiles si las necesitas, pero no son motivo para actualizar de inmediato si no las necesitas.

Paso 1: espere que esto lleve mucho tiempo si su base de datos es grande.
Incluso utilizar pg_upgradeel proceso simple de copiar los datos para una copia de seguridad puede llevar un tiempo: nuestras bases de datos de 16 GB tardan una hora o más para un pg_dump/pg_restore, o entre 10 y 20 minutos para un pg_upgrade).

Paso 2, sugiero leer el9.1 Notas de la versión. Asegúrese de que nada de lo que necesita esté roto y que nada de lo que usa haya cambiado.
No hay nada como una actualización de la base de datos que destruye tus sistemas de producción para arruinar realmente tu mes.

Paso 3,La sección de actualización del manual de Postgres.Es lectura obligatoria.

Paso 4 (inserte aquí cualquier material específico de Debian, pero eso no es lo mío :-)

Paso 5: cree un plan de actualización.

Paso 6: Pruebe el plan de actualización (técnicamente opcional, perofuertementerecomendado).

Paso 7. Realice la actualización de sus sistemas de producción.


Se aplican advertencias estándar:

  • La actualización podría destruir su base de datos. Hacer una copia de seguridad.
    • Asegúrate de poder restaurarlo.
    • Asegúrese de poder restaurar elbinariostambién para el sistema de base de datos.
      (Si puede, conserve sus paquetes antiguos de Debian; he visto personas que no pueden salir de una actualización fallida porque ya no tienen los archivos binarios de la base de datos anterior, y es un espectáculo muy triste).

  • Tardará más de lo esperado. Planifique esto.
    La política de actualización de base de datos de mi empresa es "Comience a las 6 p. m. del viernes. Si no funciona antes de las 9 a. m. del domingo, retroceda".

  • Monte un scratch mono
    Si sus datos son realmente importantes, restaure una copia en otro lugar y pruebe su ruta de actualización.
    Sí, hago esto con bases de datos de 16 GB. Seguiré haciéndolo con bases de datos de 160 GB si puedo encontrar una manera de hacerlo funcionar :-)

Respuesta2

Este es básicamente el paso 4, más la --checkopción de asegurarse de que sus rutas sean correctas. Mi instalación es desde los repositorios y tiene rutas estándar de Debian para los archivos.

[email protected]:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check

Esto falló anteriormente: dije constantemente que estaba ejecutando ambos servidores en el mismo puerto.

Lo siguiente pareció funcionar:

pg_dumpall -p 5432 | psql -d postgres -p 6543

Esto es útil.

información relacionada