Migración de una base de datos de PostgreSQL mediante volcado y restauración
SE APLICA A: Azure Database for PostgreSQL: servidor único
Azure Database for PostgreSQL: servidor flexible
Puede usar pg_dump para extraer una base de datos de PostgreSQL en un archivo de volcado. Después, use pg_restore para restaurar la base de datos de PostgreSQL a partir de un archivo de almacenamiento creado por pg_dump
.
Requisitos previos
Para seguir esta guía, necesitará:
- Un servidor de Azure Database for PostgreSQL que incluya reglas de firewall para permitir el acceso.
- Las utilidades de línea de comandos pg_dump y pg_restore instaladas.
Creación de un archivo de volcado con los datos que se van a cargar
Para hacer una copia de seguridad de una base de datos de PostgreSQL existente en el entorno local o en una máquina virtual, ejecute el comando siguiente:
pg_dump -Fc -v --host=<host> --username=<name> --dbname=<database name> -f <database>.dump
Por ejemplo, si tiene un servidor local y una base de datos llamada testdb en él, ejecute lo siguiente:
pg_dump -Fc -v --host=localhost --username=masterlogin --dbname=testdb -f testdb.dump
Restauración de los datos en la base de datos de destino
Después de crear la base de datos de destino, puede usar el comando pg_restore
y el parámetro --dbname
para restaurar los datos en la base de datos de destino desde el archivo de volcado.
pg_restore -v --no-owner --host=<server name> --port=<port> --username=<user-name> --dbname=<target database name> <database>.dump
Al incluir el parámetro --no-owner
, todos los objetos creados durante la restauración pasan a ser propiedad del usuario especificado con --username
. Para más información, consulte la documentación de PostgreSQL.
Nota
En los servidores de Azure Database for PostgreSQL, las conexiones TLS/SSL están activadas de manera predeterminada. Si el servidor de PostgreSQL requiere conexiones TLS/SSL, pero no las tiene, establezca una variable de entorno PGSSLMODE=require
para que la herramienta pg_restore se conecte con TLS. Sin TLS, el error podría ser: "FATAL: se requiere una conexión SSL. Especifique las opciones de SSL y vuelva a intentarlo". En la Windows de comandos, ejecute el comando SET PGSSLMODE=require
antes de ejecutar el pg_restore
comando. En Linux o Bash, ejecute el comando export PGSSLMODE=require
antes de ejecutar el comando pg_restore
.
En este ejemplo, restaure los datos del archivo de volcado testdb.dump en la base de datos mypgsqldb del servidor de destino mydemoserver.postgres.database.azure.com.
Este es un ejemplo de cómo usar este comando pg_restore
para un servidor único:
pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin@mydemoserver --dbname=mypgsqldb testdb.dump
Este es un ejemplo de cómo usar este comando pg_restore
para un servidor flexible:
pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin --dbname=mypgsqldb testdb.dump
Optimización del proceso de migración
Una manera de migrar la base de datos de PostgreSQL existente a Azure Database for PostgreSQL consiste en realizar una copia de seguridad de la base de datos en el origen y restaurarla en Azure. Para minimizar el tiempo necesario para completar la migración, considere el uso de los parámetros siguientes con los comandos de copia de seguridad y restauración.
Nota
Para obtener información de sintaxis detallada, consulte pg_dump y pg_restore.
Para la copia de seguridad
Realice la copia de seguridad con el modificador -Fc
para poder realizar la restauración en paralelo a fin de agilizarla. Por ejemplo:
pg_dump -h my-source-server-name -U source-server-username -Fc -d source-databasename -f Z:\Data\Backups\my-database-backup.dump
Para la restauración
Mueva el archivo de copia de seguridad a una máquina virtual de Azure en la misma región que el servidor de Azure Database for PostgreSQL al que migrará. Ejecute el comando
pg_restore
desde esa máquina virtual para reducir la latencia de red. Cree la VM con las redes aceleradas habilitadas.Abra el archivo de volcado de memoria para comprobar que las instrucciones CREATE INDEX se encuentran después de la inserción de datos. Si no es así, mueva las instrucciones de creación de índice una vez insertados los datos. Esto debería hacerse de manera predeterminada, pero se recomienda confirmarlo.
Restaure con el modificador
-j N
(dondeN
representa el número) para paralelizar la restauración. El número que especifique es el número de núcleos en el servidor de destino. También puede establecer el doble de los núcleos del servidor de destino para ver el impacto.Este es un ejemplo de cómo usar este comando
pg_restore
para un servidor único:pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username@my-target-server -j 4 -d my-target-databasename Z:\Data\Backups\my-database-backup.dump
Este es un ejemplo de cómo usar este comando
pg_restore
para un servidor flexible:pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username -j 4 -d my-target-databasename Z:\Data\Backups\my-database-backup.dump
También puede editar el archivo de volcado si agrega el comando
set synchronous_commit = off;
al principio y el comandoset synchronous_commit = on;
al final. Si no lo activa al final, antes de que las aplicaciones cambien los datos, podría provocar la consiguiente pérdida de datos.En el servidor Azure Database for PostgreSQL de destino, considere la posibilidad de hacer lo siguiente antes de la restauración:
Desactive el seguimiento del rendimiento de las consultas. Estas estadísticas no son necesarias durante la migración. Para ello, puede establecer
pg_stat_statements.track
,pg_qs.query_capture_mode
ypgms_wait_sampling.query_capture_mode
enNONE
.Use una SKU de memoria alta y proceso elevado, como la de 32 núcleos virtuales con optimización para memoria, para acelerar la migración. Puede escalar fácilmente de vuelta a su SKU preferida una vez completada la restauración. Cuanto mayor sea la SKU, mayor paralelismo puede lograr al aumentar el parámetro
-j
correspondiente en el comandopg_restore
.Si se aumenta la cantidad de IOPS en el servidor de destino, podría mejorar el rendimiento de la restauración. Puede aprovisionar más IOPS si aumenta el tamaño de almacenamiento del servidor. Esta configuración no se puede revertir, pero plantéese si una IOPS mayor beneficiaría la carga de trabajo real en el futuro.
No olvide probar y validar estos comandos en un entorno de prueba antes de usarlos en producción.
Pasos siguientes
- Para migrar una base de datos de PostgreSQL mediante exportación e importación, consulte Migración de una base de datos de PostgreSQL mediante exportación e importación.
- Para obtener más información sobre cómo migrar bases de datos a Azure Database for PostgreSQL, vea la Guía de migración de base de datos.