Cómo Migrar una Base de Datos PostgreSQL a una Nueva Versión en un Dispositivo NAS

Versión del producto: 11.0

Último modificado: 30 de septiembre de 2024

Los pasos que se indican a continuación se probaron para el NAS ASUSTOR, pero también se pueden aplicar a otros NAS en los que Postgres sea un contenedor Docker.

Importante

Asegúrese de utilizar las rutas correctas al migrar en un NAS que no sea ASUSTOR.

Migrando la Base de Datos PostgreSQL a su Versión más Reciente Usando Exportar/Importar la configuración del sistema

Nota

Los pasos a continuación fueron probados para migrar PostgreSQL v13 a PostgreSQL v16 pero pueden ser aplicados a cualquier versión de PostgreSQL de la que necesite migrar.

Para migrar su base de datos PostgreSQL a su versión más reciente sin guardar la versión anterior de la base de datos en un dispositivo NAS, siga estos pasos:

  1. En su instancia de NAKIVO Backup & Replication, vaya a Ajustes > Ajustes del sistema > Configuración.

  2. Haga clic en Exportar la configuración del sistema. Para más detalles, consulte Exportar la configuración del sistema.

  3. Inicie sesión en su dispositivo NAS.

  4. De eliminar PostgreSQL v13 del dispositivo.

  5. Instale PostgreSQL v16 en este NAS. Asegúrese de utilizar el mismo puerto por defecto: 5432.

  6. Vuelva a su instancia de NAKIVO Backup & Replication y reinstálela.

  7. Vuelva al dispositivo NAS con el NAKIVO Backup & Replication limpio.

  8. Abrir ajustes > Ajustes del sistema > Configuración.

  9. Haga clic en Importar la configuración del sistema. Para más detalles, consulte Importar la configuración del sistema.

  10. Su configuración de NAKIVO Backup & Replication se importa con los datos existentes.

Migrando la Base de Datos PostgreSQL a su Versión más Reciente Conservando la Versión Anterior de la Base de Datos

Si desea migrar su base de datos PostgreSQL a su versión más reciente conservando la versión anterior en su dispositivo NAS, utilice una de las siguientes opciones:

Ejemplo 1: Uso exclusivo de la consola SSH

Nota

Los pasos a continuación fueron probados para migrar PostgreSQL v13 a PostgreSQL v16 pero pueden ser aplicados a cualquier versión de PostgreSQL de la que necesite migrar.

Se aplican las siguientes condiciones previas:

  • Tienes Docker instalado.

  • PostgreSQL v13 está instalado y ejecutándose en el puerto por defecto, 5432.

  • Nakivo ha migrado a la base de datos PostgreSQL v13.

     

  1. Conéctese a su dispositivo NAS mediante SSH (puede utilizar el cliente ssh PuTTY) como usuario root.

  2. Crea un nuevo contenedor Docker e instala PostgreSQL v16 en su interior.

    Ejecute los siguientes comandos:

    • Para instalar la última versión de PostgreSQL:

    #docker pull postgres

    • Para especificar la versión, por ejemplo, docker pull postgres:16.2:

    #docker run --name <container name> -p <port>:<port> -e POSTGRES_USER=<postgres user> -e POSTGRES_PASSWORD=<postgres user password> -e POSTGRES_DB=<database name> -d postgres

    Ejemplo:

    #docker run --name Postgres-16 -p 5435:5435 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=admin -e POSTGRES_DB=postgres16db -d postgres

    Nota

    Asegúrese de que el puerto utilizado por PostgreSQL v16 difiere del puerto utilizado por PostgreSQL v13, por ejemplo 5435.

    Se mostrará un nuevo ID de contenedor después de ejecutar la última orden.

    Ejemplo:

    add52c94d9287e7be5782e1b6f032cbeb75505ba24549badfdfd89f7532f3e23

  3. Ir a cd /volume1/.@plugins/AppCentral/docker-ce/docker_lib/containers/<containerID>.

  4. Vaya a su dispositivo NAS y detenga el servicio Docker.

  5. Vuelva a la consola y ejecute el siguiente comando:

    #vi config.v2.json

  6. ExposedPorts: {"5432/tcp":{},"<port>/tcp":{}} -> leave only {"<port>/tcp":{}}.

    Ejemplo:

    Importante

    Asegúrese de que aparece el puerto correcto en el archivo hostconfig.json:

    PortBindings :{"<puerto>/tcp":[

    {"HostIp":"", "HostPort":"<puerto>"}]}

  7. Inicie el servicio Docker en el dispositivo NAS.

  8. Para comprobar si el puerto ha sido cambiado para PostgreSQL v16, ejecute el siguiente comando:

    #docker ps

  9. Ejecute estos comandos para iniciar sesión en PostgreSQL v16 Docker:

    #docker exec -it Postgres-16 bash

    #cd /var/lib/postgresql/data

  10. Para asegurarse de que el puerto<port> está especificado, ejecute#vi postgresql.conf, configure este puerto y descomente la fila.

    Nota

    Es necesario instalar la utilidad vim.

    Ejemplo:

  11. Reinicie el servicio Docker (si ha cambiado el puerto).

  12. Para asegurarse de que el proceso PostgreSQL se ejecuta en el puerto <port>, ejecute el siguiente código:

    #cat postmaster.pid

    Ejemplo:

  13. Cerrar sesión del Docker.

  14. Ejecute los siguientes comandos para volcar la base de datos de PostgreSQL v13 y restaurarla a PostgreSQL v16:

    #docker exec -it postgres-13 bash -c "PGPASSWORD=admin pg_dump --username postgres <nombre de la base de datos antigua>" > /home/dbexport.pgsql

    #docker exec -i Postgres-16 bash -c "PGPASSWORD=admin psql --username postgres <nombre de la base de datos> -p <puerto>" < /home/dbexport.pgsql

    Notas

    • %s dfsdf %4889%lkjlkj% y postgres-16 representan los nombres de los contenedores.

    • La ruta /home/dbexport.pgsql puede personalizarse.

  15. Vaya a la máquina virtual con NAKIVO Backup & Replication instalado.

  16. Detenga el servicio NAKIVO Backup & Replication Director.

  17. Edite el archivoconfig.properties.

    (para SO Windows: NBR directory > userdata > config.properties archivo

    para SO Linux: /opt/nakivo/director/userdata/config.properties file)

  18. Introduzca un nuevo puerto para el servidor PostgreSQL v16.

  19. Escriba un nuevo nombre de base de datos.

    Ejemplo para el sistema operativo Windows:

  20. Guarda los cambios.

  21. Reinicie el servicio NAKIVO Backup & Replication Director.

Se aplican las siguientes condiciones posteriores:

Se elimina la base de datos de PostgreSQL v13.

Ejecute los siguientes comandos:

  • Para ir a la ubicación de la base de datos PostgreSQL v13 en Docker:

    #docker stop postgres-13 (elimina las conexiones actuales a la base de datos (si recibe el error al ejecutarse))

    #docker start postgres-13/

    #docker exec -it postgres-13 bash

    #cd /usr/lib/postgresql/13/bin

    #psql -p 5432 --username postgres

    Nota

    Postgres-13 es el nombre del contenedor.

  • Para ver todas las bases de datos existentes:

    <postgres=#> \l

  • Para eliminar la base de datos de PostgreSQL v13:

    <postgres=#> DROP DATABASE <antiguo nombre de la base de datos> CON (FORCE);

    Nota

    El uso de WITH (FORCE) es opcional.

  • Para comprobar la lista de todas las bases de datos existentes en PostgreSQL v13 y asegurarse de que la base de datos antigua se ha eliminado correctamente:

    <postgres=#> \l

Ejemplo 2: Uso de la consola SSH y pgAdmin

Nota

Los pasos a continuación fueron probados para migrar PostgreSQL v13 a PostgreSQL v16 pero pueden ser aplicados a cualquier versión de PostgreSQL de la que necesite migrar.

Se aplican las siguientes condiciones previas:

  • Tienes Docker instalado.

  • Tiene pgAdmin instalado y ejecutándose en el puerto por defecto, 5430 ((https://ip_address_of_pgadmin:5430/login?next=/).

  • PostgreSQL v13 está instalado y ejecutándose en el puerto por defecto, 5432.

  • Nakivo ha migrado a la base de datos PostgreSQL v13.

     

  1. Inicie sesión en pgAdmin (utilice las siguientes credenciales: user@domain.com / contraseña: pgadmin)

  2. Registrar el servidor PostgreSQL v13 en pgAdmin(usuario - postgres, pass - admin, puerto (por defecto) - 5432)

  3. Seleccione la base de datos existente en PostgreSQL v13.

  4. Haga clic con el botón derecho en la base de datos y seleccione la opción Backup.

  5. Escriba el nombre del archivo de exportación y seleccione el destino.

  6. Exportar la base de datos de PostgreSQL v13.

  7. Conéctese a su dispositivo NAS mediante SSH (puede utilizar el cliente ssh PuTTY) como usuario root.

  8. Crea un nuevo contenedor Docker e instala PostgreSQL v16 en su interior.

    Ejecute los siguientes comandos:

    • Para instalar la última versión de PostgreSQL:

    #docker pull postgres

    • Para especificar la versión, por ejemplo, docker pull postgres:16.2:

    #docker ejecutar --nombre <nombre del contenedor> -p <puerto>:<puerto> -e POSTGRES_USER=<usuario postgres> -e POSTGRES_PASSWORD=<contraseña usuario postgres> -e POSTGRES_DB=<nombre de la base de datos> -d postgres

    Ejemplo:

    #docker run --name Postgres-16 -p 5435:5435 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=admin -e POSTGRES_DB=postgres16db -d postgres

    Nota

    Asegúrese de que el puerto utilizado por PostgreSQL v16 difiere del puerto utilizado por PostgreSQL v13, por ejemplo 5435.

    Se mostrará un nuevo ID de contenedor después de ejecutar la última orden.

    Ejemplo:

    add52c94d9287e7be5782e1b6f032cbeb75505ba24549badfdfd89f7532f3e23

  9. Ir a cd /volume1/.@plugins/AppCentral/docker-ce/docker_lib/containers/<containerID>.

  10. Vaya a su dispositivo NAS y detenga el servicio Docker.

  11. Vuelva a la consola y ejecute el siguiente comando:

    #vi config.v2.json

  12. ExposedPorts: {"5432/tcp":{},"<port>/tcp":{}} -> leave only {"<port>/tcp":{}}.

    Ejemplo:

    Importante

    Asegúrese de que aparece el puerto correcto en el archivo hostconfig.json:

    PortBindings :{"<puerto>/tcp":[

    {"HostIp":"", "HostPort":"<puerto>"}]}

  13. Inicie el servicio Docker en el dispositivo NAS.

  14. Para comprobar si el puerto ha sido cambiado para PostgreSQL v16, ejecute el siguiente comando:

    #docker ps

  15. Ejecute estos comandos para iniciar sesión en PostgreSQL v16 Docker:

    #docker exec -it Postgres-16 bash

    #cd /var/lib/postgresql/data

  16. Para asegurarse de que el puerto<port> está especificado, ejecute#vi postgresql.conf, configure este puerto y descomente la fila.

    Nota

    Es necesario instalar la utilidad vim.

    Ejemplo:

  17. Reinicie el servicio Docker (si ha cambiado el puerto).

  18. Para asegurarse de que el proceso PostgreSQL se ejecuta en el puerto <port>, ejecute el siguiente código:

    #cat postmaster.pid

    Ejemplo:

  19. Volver a pgAdmin.

  20. Registre el servidor PostgreSQL v16 en pgAdmin(usuario - postgres, pass - admin, puerto - puerto personalizado <port>).

  21. Seleccione el <database name>.

  22. Haga clic con el botón derecho del ratón y seleccione la opción Restaurar.

  23. Seleccione la base de datos exportada de PostgreSQL v13.

  24. Complete la importación de la base de datos.

  25. Vaya a la máquina virtual con NAKIVO Backup & Replication instalado.

  26. Detenga el servicio NAKIVO Backup & Replication Director.

  27. Edite el archivo config.properties.

    (para SO Windows: NBR directory > userdata > config.properties archivo

    para SO Linux: /opt/nakivo/director/userdata/config.properties archivo).

  28. Introduzca un nuevo puerto para el servidor PostgreSQL v16.

  29. Escriba un nuevo nombre de base de datos.

    Ejemplo para el sistema operativo Windows:

  30. Guardar los cambios

  31. Reinicie el servicio NAKIVO Backup & Replication Director.

Se aplican las siguientes condiciones posteriores:

Para eliminar la base de datos de PostgreSQL v13, vuelva a pgAdmin, seleccione la base de datos y haga clic en Eliminar (Forzar) para eliminarla.