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
-
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, consulte Migración de la base de datos PostgreSQL a su versión más reciente mediante la exportación/importación de la configuración del sistema.
-
Para migrar los datos de su base de datos PostgreSQL a su versión más reciente conservando la versión anterior, consulte Migrar la base de datos PostgreSQL a su versión más reciente conservando la versión anterior de la base de datos.
Esta opción se utiliza cuando es esencial no perder los datos de la base de datos compartidos por varios usuarios.
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:
-
En su instancia de NAKIVO Backup & Replication, vaya a Ajustes > Ajustes del sistema > Configuración.
-
Haga clic en Exportar la configuración del sistema. Para más detalles, consulte Exportar la configuración del sistema.
-
Inicie sesión en su dispositivo NAS.
-
De eliminar PostgreSQL v13 del dispositivo.
-
Instale PostgreSQL v16 en este NAS. Asegúrese de utilizar el mismo puerto por defecto: 5432.
-
Vuelva a su instancia de NAKIVO Backup & Replication y reinstálela.
-
Vuelva al dispositivo NAS con el NAKIVO Backup & Replication limpio.
-
Abrir ajustes > Ajustes del sistema > Configuración.
-
Haga clic en Importar la configuración del sistema. Para más detalles, consulte Importar la configuración del sistema.
-
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.
-
Conéctese a su dispositivo NAS mediante SSH (puede utilizar el cliente ssh PuTTY) como usuario root.
-
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
-
-
Ir a
cd /volume1/.@plugins/AppCentral/docker-ce/docker_lib/containers/<containerID>
. -
Vaya a su dispositivo NAS y detenga el servicio Docker.
-
Vuelva a la consola y ejecute el siguiente comando:
#vi config.v2.json
-
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>"}]}
-
Inicie el servicio Docker en el dispositivo NAS.
-
Para comprobar si el puerto ha sido cambiado para PostgreSQL v16, ejecute el siguiente comando:
#docker ps
-
Ejecute estos comandos para iniciar sesión en PostgreSQL v16 Docker:
#docker exec -it Postgres-16 bash
#cd /var/lib/postgresql/data
-
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:
-
Reinicie el servicio Docker (si ha cambiado el puerto).
-
Para asegurarse de que el proceso PostgreSQL se ejecuta en el puerto
<port>
, ejecute el siguiente código:#cat postmaster.pid
Ejemplo:
-
Cerrar sesión del Docker.
-
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%
ypostgres-16
representan los nombres de los contenedores. -
La ruta
/home/dbexport.pgsql
puede personalizarse.
-
-
Vaya a la máquina virtual con NAKIVO Backup & Replication instalado.
-
Detenga el servicio NAKIVO Backup & Replication Director.
-
Edite el archivo
config.properties
.(para SO Windows:
NBR directory > userdata > config.properties
archivopara SO Linux:
/opt/nakivo/director/userdata/config.properties
file) -
Introduzca un nuevo puerto para el servidor PostgreSQL v16.
-
Escriba un nuevo nombre de base de datos.
Ejemplo para el sistema operativo Windows:
-
Guarda los cambios.
-
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.
-
Inicie sesión en pgAdmin (utilice las siguientes credenciales: user@domain.com / contraseña: pgadmin)
-
Registrar el servidor PostgreSQL v13 en pgAdmin(usuario - postgres, pass - admin, puerto (por defecto) - 5432)
-
Seleccione la base de datos existente en PostgreSQL v13.
-
Haga clic con el botón derecho en la base de datos y seleccione la opción Backup.
-
Escriba el nombre del archivo de exportación y seleccione el destino.
-
Exportar la base de datos de PostgreSQL v13.
-
Conéctese a su dispositivo NAS mediante SSH (puede utilizar el cliente ssh PuTTY) como usuario root.
-
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
-
-
Ir a
cd /volume1/.@plugins/AppCentral/docker-ce/docker_lib/containers/<containerID>
. -
Vaya a su dispositivo NAS y detenga el servicio Docker.
-
Vuelva a la consola y ejecute el siguiente comando:
#vi config.v2.json
-
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>"}]}
-
Inicie el servicio Docker en el dispositivo NAS.
-
Para comprobar si el puerto ha sido cambiado para PostgreSQL v16, ejecute el siguiente comando:
#docker ps
-
Ejecute estos comandos para iniciar sesión en PostgreSQL v16 Docker:
#docker exec -it Postgres-16 bash
#cd /var/lib/postgresql/data
-
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:
-
Reinicie el servicio Docker (si ha cambiado el puerto).
-
Para asegurarse de que el proceso PostgreSQL se ejecuta en el puerto
<port>
, ejecute el siguiente código:#cat postmaster.pid
Ejemplo:
-
Volver a pgAdmin.
-
Registre el servidor PostgreSQL v16 en pgAdmin(usuario - postgres, pass - admin, puerto - puerto personalizado
<port>
). -
Seleccione el
<database name>
. -
Haga clic con el botón derecho del ratón y seleccione la opción Restaurar.
-
Seleccione la base de datos exportada de PostgreSQL v13.
-
Complete la importación de la base de datos.
-
Vaya a la máquina virtual con NAKIVO Backup & Replication instalado.
-
Detenga el servicio NAKIVO Backup & Replication Director.
-
Edite el archivo
config.properties
.(para SO Windows:
NBR directory > userdata > config.properties
archivopara SO Linux:
/opt/nakivo/director/userdata/config.propertie
s archivo). -
Introduzca un nuevo puerto para el servidor PostgreSQL v16.
-
Escriba un nuevo nombre de base de datos.
Ejemplo para el sistema operativo Windows:
-
Guardar los cambios
-
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.