Nuestro team de trabajo ha pasado horas buscando la solución a tus preguntas, te compartimos la respuestas por esto nuestro deseo es que te sea de mucha apoyo.
pg_basebackup: realiza una copia de seguridad básica de un clúster de PostgreSQL
Sinopsis
pg_basebackup
[option
…]
Descripción
pg_basebackup se utiliza para realizar una copia de seguridad básica de un clúster de base de datos PostgreSQL en ejecución. La copia de seguridad se realiza sin afectar a otros clientes de la base de datos y se puede utilizar tanto para la recuperación en un momento determinado (consulte la Sección 25.3) como como punto de partida para un servidor en espera de envío de registros o replicación de transmisión por secuencias (consulte la Sección 26.2). .
pg_basebackup realiza una copia exacta de los archivos del clúster de la base de datos, mientras se asegura de que el servidor entre y salga del modo de copia de seguridad automáticamente. Las copias de seguridad siempre se toman de todo el clúster de la base de datos; no es posible realizar copias de seguridad de bases de datos u objetos de base de datos individuales. Para copias de seguridad selectivas, se debe utilizar otra herramienta como pg_dump.
La copia de seguridad se realiza a través de una conexión PostgreSQL normal que utiliza el protocolo de replicación. La conexión debe realizarse con un ID de usuario que tenga REPLICATION
permisos (consulte la Sección 21.2) o es un superusuario, y pg_hba.conf
debe permitir la conexión de replicación. El servidor también debe configurarse con max_wal_senders configurado lo suficientemente alto para proporcionar al menos un walsender para la copia de seguridad más uno para la transmisión WAL (si se usa).
Puede haber varios pg_basebackup
s ejecutándose al mismo tiempo, pero generalmente es mejor desde el punto de vista del rendimiento realizar solo una copia de seguridad y copiar el resultado.
pg_basebackup puede realizar una copia de seguridad básica no solo desde un servidor primario sino también desde un servidor en espera. Para realizar una copia de seguridad desde un modo en espera, configure el modo en espera para que pueda aceptar conexiones de replicación (es decir, configure max_wal_senders
y hot_standby, y configure su pg_hba.conf
adecuadamente). También deberá habilitar full_page_writes en el primario.
Tenga en cuenta que existen algunas limitaciones para realizar una copia de seguridad desde un modo de espera:
-
El archivo del historial de respaldo no se crea en el clúster de la base de datos respaldado.
-
Si esta usando
-X none
, no hay garantía de que todos los archivos WAL necesarios para la copia de seguridad se archiven al final de la copia de seguridad. -
Si el modo de espera se promueve como principal durante la copia de seguridad, la copia de seguridad falla.
-
Todos los registros WAL necesarios para la copia de seguridad deben contener suficientes escrituras de página completa, lo que requiere que habilite
full_page_writes
en el primario y no usar una herramienta como pg_compresslog comoarchive_command
para eliminar escrituras de página completa de archivos WAL.
Siempre que pg_basebackup está tomando una copia de seguridad base, el servidor pg_stat_progress_basebackup
view informará el progreso de la copia de seguridad. Consulte la Sección 27.4.5 para obtener más detalles.
Opciones
Las siguientes opciones de la línea de comandos controlan la ubicación y el formato de la salida:
-D directory
--pgdata=directory
-
Establece el directorio de destino en el que escribir la salida. pg_basebackup creará este directorio (y cualquier directorio principal que falte) si no existe. Si ya existe, debe estar vacío.
Cuando la copia de seguridad está en formato tar, el directorio de destino se puede especificar como
-
(guión), lo que hace que el archivo tar se escriba enstdout
.Esta opción es obligatoria.
-F format
--format=format
-
Selecciona el formato de salida.
format
puede ser uno de los siguientes:p
plain
-
Escriba la salida como archivos sin formato, con el mismo diseño que el directorio de datos y los espacios de tabla del servidor de origen. Cuando el clúster no tiene espacios de tabla adicionales, toda la base de datos se colocará en el directorio de destino. Si el clúster contiene espacios de tabla adicionales, el directorio de datos principal se colocará en el directorio de destino, pero todos los demás espacios de tabla se colocarán en la misma ruta absoluta que tienen en el servidor de origen.
Este es el formato por defecto.
t
tar
-
Escriba la salida como archivos tar en el directorio de destino. El contenido del directorio de datos principal se escribirá en un archivo llamado
base.tar
, y cada uno de los demás espacios de tabla se escribirá en un archivo tar separado con el nombre del OID de ese espacio de tabla.Si el directorio de destino se especifica como
-
(guión), el contenido de alquitrán se escribirá en la salida estándar, adecuada para canalizar a (por ejemplo) gzip. Esto solo se permite si el clúster no tiene espacios de tabla adicionales y no se utiliza la transmisión WAL.
-R
--write-recovery-conf
-
Crea un
standby.signal
archivo y agrega la configuración de conexión alpostgresql.auto.conf
archivo en el directorio de destino (o dentro del archivo de almacenamiento base cuando se usa el formato tar). Esto facilita la configuración de un servidor en espera utilizando los resultados de la copia de seguridad.los
postgresql.auto.conf
file registrará la configuración de la conexión y, si se especifica, la ranura de replicación que usa pg_basebackup, de modo que la replicación de transmisión usará la misma configuración más adelante. -T olddir=newdir
--tablespace-mapping=olddir=newdir
-
Reubica el espacio de tabla en el directorio
olddir
paranewdir
durante la copia de seguridad. Ser efectivo,olddir
debe coincidir exactamente con la especificación de ruta del espacio de tabla tal como se define en el servidor de origen. (Pero no es un error si no hay espacio de tabla enolddir
en el servidor de origen).newdir
es un directorio en el sistema de archivos del host receptor. Al igual que con el directorio de destino principal,newdir
no es necesario que exista ya, pero si existe, debe estar vacío. Ambosolddir
ynewdir
deben ser caminos absolutos. Si alguna de las rutas debe contener un signo igual (=
), preceda eso con una barra invertida. Esta opción se puede especificar varias veces para varios espacios de tabla.Si un espacio de tabla se reubica de esta manera, los enlaces simbólicos dentro del directorio de datos principal se actualizan para apuntar a la nueva ubicación. Por lo tanto, el nuevo directorio de datos está listo para usarse en una nueva instancia de servidor con todos los espacios de tabla en las ubicaciones actualizadas.
--waldir=waldir
-
Establece el directorio en el que escribir archivos WAL (registro de escritura anticipada). Por defecto, los archivos WAL se colocarán en el
pg_wal
subdirectorio del directorio de destino, pero esta opción se puede utilizar para colocarlos en otro lugar.waldir
debe ser un camino absoluto. Al igual que con el directorio de destino principal,waldir
no es necesario que exista ya, pero si existe, debe estar vacío. Esta opción solo se puede especificar cuando la copia de seguridad está en formato simple. -X method
--wal-method=method
-
Incluye los archivos WAL (registro de escritura anticipada) necesarios en la copia de seguridad. Esto incluirá todos los registros de escritura anticipada generados durante la copia de seguridad. A menos que el método
none
se especifica, es posible iniciar un administrador de correo en el directorio de destino sin la necesidad de consultar el archivo de registro, lo que hace que la salida sea una copia de seguridad completamente independiente.El seguimiento
method
Se admiten los s para recopilar los registros de escritura anticipada:n
none
-
No incluya registros de escritura anticipada en la copia de seguridad.
f
fetch
-
Los archivos de registro de escritura anticipada se recopilan al final de la copia de seguridad. Por lo tanto, es necesario que el parámetro wal_keep_size del servidor de origen se establezca lo suficientemente alto como para que los datos de registro requeridos no se eliminen antes de que finalice la copia de seguridad. Si los datos de registro necesarios se han reciclado antes de que sea el momento de transferirlos, la copia de seguridad fallará y no podrá utilizarse.
Cuando se utiliza el formato tar, los archivos de registro de escritura anticipada se incluirán en el
base.tar
expediente. s
stream
-
Transmita datos de registro de escritura anticipada mientras se realiza la copia de seguridad. Este método abrirá una segunda conexión con el servidor y comenzará a transmitir el registro de escritura anticipada en paralelo mientras se ejecuta la copia de seguridad. Por lo tanto, requerirá dos conexiones de replicación, no solo una. Siempre que el cliente pueda mantenerse al día con los datos del registro de escritura anticipada, el uso de este método no requiere que se guarden registros de escritura anticipada adicionales en el servidor de origen.
Cuando se usa el formato tar, los archivos de registro de escritura anticipada se escribirán en un archivo separado llamado
pg_wal.tar
(si el servidor es una versión anterior a la 10, el archivo se denominarápg_xlog.tar
).Este valor es el predeterminado.
-z
--gzip
-
Habilita la compresión gzip de la salida del archivo tar, con el nivel de compresión predeterminado. La compresión solo está disponible cuando se usa el formato tar y el sufijo
.gz
se agregará automáticamente a todos los nombres de archivo tar. -Z level
--compress=level
-
Habilita la compresión gzip de la salida del archivo tar y especifica el nivel de compresión (0 a 9, 0 es sin compresión y 9 es la mejor compresión). La compresión solo está disponible cuando se usa el formato tar y el sufijo
.gz
se agregará automáticamente a todos los nombres de archivo tar.
Las siguientes opciones de la línea de comandos controlan la generación de la copia de seguridad y la invocación del programa:
-c fast|spread
--checkpoint=fast|spread
-
Establece el modo de punto de control en rápido (inmediato) o extendido (el predeterminado) (consulte la Sección 25.3.3).
-C
--create-slot
-
Especifica que la ranura de replicación nombrada por el
--slot
Se debe crear la opción antes de iniciar la copia de seguridad. Se genera un error si la ranura ya existe. -l label
--label=label
-
Establece la etiqueta para la copia de seguridad. Si no se especifica ninguno, un valor predeterminado de “
pg_basebackup base backup
“ se utilizará. -n
--no-clean
-
Por defecto, cuando
pg_basebackup
aborta con un error, elimina cualquier directorio que haya creado antes de descubrir que no puede finalizar el trabajo (por ejemplo, el directorio de destino y el directorio de registro de escritura anticipada). Esta opción inhibe la limpieza y, por lo tanto, es útil para depurar.Tenga en cuenta que los directorios de tablespace no se limpian de ninguna manera.
-N
--no-sync
-
Por defecto,
pg_basebackup
esperará a que todos los archivos se escriban de forma segura en el disco. Esta opción provocapg_basebackup
regresar sin esperar, lo cual es más rápido, pero significa que una falla posterior del sistema operativo puede dejar la copia de seguridad base dañada. Generalmente, esta opción es útil para realizar pruebas, pero no debe utilizarse al crear una instalación de producción. -P
--progress
-
Habilita los informes de progreso. Al activarlo, se generará un informe de progreso aproximado durante la copia de seguridad. Dado que la base de datos puede cambiar durante la copia de seguridad, esto es solo una aproximación y puede no terminar exactamente
100%
. En particular, cuando se incluye el registro WAL en la copia de seguridad, la cantidad total de datos no se puede estimar por adelantado y, en este caso, el tamaño objetivo estimado aumentará una vez que pase la estimación total sin WAL. -r rate
--max-rate=rate
-
Establece la velocidad de transferencia máxima a la que se recopilan los datos del servidor de origen. Esto puede resultar útil para limitar el impacto de pg_basebackup en el servidor. Los valores están en kilobytes por segundo. Usa un sufijo de
M
para indicar megabytes por segundo. Un sufijo dek
también se acepta y no tiene ningún efecto. Los valores válidos están entre 32 kilobytes por segundo y 1024 megabytes por segundo.Esta opción siempre afecta la transferencia del directorio de datos. La transferencia de archivos WAL solo se ve afectada si el método de recolección es
fetch
. -S slotname
--slot=slotname
-
Esta opción solo se puede utilizar junto con
-X stream
. Hace que la transmisión WAL utilice la ranura de replicación especificada. Si la copia de seguridad base está destinada a utilizarse como un modo de espera de replicación de transmisión mediante una ranura de replicación, el modo en espera debe usar el mismo nombre de ranura de replicación que nombre_ranura_primaria. Esto asegura que el servidor primario no elimine ningún dato WAL necesario en el tiempo entre el final de la copia de seguridad base y el inicio de la replicación de transmisión en el nuevo modo de espera.La ranura de replicación especificada debe existir a menos que la opción
-C
también se utiliza.Si no se especifica esta opción y el servidor admite ranuras de replicación temporal (versión 10 y posteriores), se utiliza automáticamente una ranura de replicación temporal para la transmisión WAL.
-v
--verbose
-
Habilita el modo detallado. Generará algunos pasos adicionales durante el inicio y el apagado, así como también mostrará el nombre exacto del archivo que se está procesando actualmente si los informes de progreso también están habilitados.
--manifest-checksums=algorithm
-
Especifica el algoritmo de suma de comprobación que se debe aplicar a cada archivo incluido en el manifiesto de respaldo. Actualmente, los algoritmos disponibles son
NONE
,CRC32C
,SHA224
,SHA256
,SHA384
, ySHA512
. El valor predeterminado esCRC32C
.Si
NONE
está seleccionado, el manifiesto de respaldo no contendrá ninguna suma de comprobación. De lo contrario, contendrá una suma de comprobación de cada archivo en la copia de seguridad utilizando el algoritmo especificado. Además, el manifiesto siempre contendrá unSHA256
suma de comprobación de su propio contenido. losSHA
los algoritmos son significativamente más intensivos en la CPU queCRC32C
, por lo que seleccionar uno de ellos puede aumentar el tiempo necesario para completar la copia de seguridad.El uso de una función hash SHA proporciona un resumen criptográficamente seguro de cada archivo para los usuarios que desean verificar que la copia de seguridad no ha sido manipulada, mientras que el algoritmo CRC32C proporciona una suma de comprobación que es mucho más rápida de calcular; es bueno para detectar errores debido a cambios accidentales, pero no es resistente a modificaciones maliciosas. Tenga en cuenta que, para que sea útil contra un adversario que tenga acceso a la copia de seguridad, el manifiesto de la copia de seguridad debería almacenarse de forma segura en otro lugar o verificar que no se haya modificado desde que se realizó la copia de seguridad.
pg_verifybackup se puede utilizar para verificar la integridad de una copia de seguridad con el manifiesto de copia de seguridad.
--manifest-force-encode
-
Obliga a que todos los nombres de archivo del manifiesto de respaldo estén codificados en hexadecimal. Si no se especifica esta opción, solo los nombres de archivo que no son UTF8 tienen codificación hexadecimal. Esta opción está destinada principalmente a probar que las herramientas que leen un archivo de manifiesto de respaldo manejan correctamente este caso.
--no-estimate-size
-
Evita que el servidor calcule la cantidad total de datos de respaldo que se transmitirán, lo que da como resultado la
backup_total
columna en elpg_stat_progress_basebackup
ver siempre siendoNULL
.Sin esta opción, la copia de seguridad comenzará enumerando el tamaño de toda la base de datos y luego regresará y enviará el contenido real. Esto puede hacer que la copia de seguridad tarde un poco más y, en particular, llevará más tiempo antes de que se envíen los primeros datos. Esta opción es útil para evitar dicho tiempo de estimación si es demasiado largo.
Esta opción no está permitida cuando se usa
--progress
. --no-manifest
-
Inhabilita la generación de un manifiesto de respaldo. Si no se especifica esta opción, el servidor generará y enviará un manifiesto de respaldo que se puede verificar usando pg_verifybackup. El manifiesto es una lista de todos los archivos presentes en la copia de seguridad con la excepción de cualquier archivo WAL que pueda estar incluido. También almacena el tamaño, la hora de la última modificación y una suma de comprobación opcional para cada archivo.
--no-slot
-
Evita la creación de una ranura de replicación temporal para la copia de seguridad.
De forma predeterminada, si se selecciona la transmisión de registros, pero no se proporciona un nombre de ranura con el
-S
opción, luego se crea una ranura de replicación temporal (si es compatible con el servidor de origen).El propósito principal de esta opción es permitir realizar una copia de seguridad base cuando el servidor no tiene ranuras de replicación libres. Casi siempre se prefiere usar una ranura de replicación, ya que evita que el servidor elimine la WAL necesaria durante la copia de seguridad.
--no-verify-checksums
-
Deshabilita la verificación de las sumas de comprobación, si están habilitadas en el servidor del que se toma la copia de seguridad base.
De forma predeterminada, las sumas de comprobación se verifican y las fallas en la suma de comprobación darán como resultado un estado de salida distinto de cero. Sin embargo, la copia de seguridad base no se eliminará en tal caso, como si el
--no-clean
se había utilizado la opción. Las fallas de verificación de la suma de comprobación también se informarán en elpg_stat_database
vista.
Las siguientes opciones de la línea de comandos controlan la conexión al servidor de origen:
-d connstr
--dbname=connstr
-
Especifica los parámetros utilizados para conectarse al servidor, como Cadena de conexión; estos anularán cualquier opción de línea de comandos en conflicto.
La opción se llama
--dbname
para mantener la coherencia con otras aplicaciones cliente, pero debido a que pg_basebackup no se conecta a ninguna base de datos en particular en el clúster, se ignorará cualquier nombre de base de datos en la cadena de conexión. -h host
--host=host
-
Especifica el nombre de host de la máquina en la que se ejecuta el servidor. Si el valor comienza con una barra, se usa como directorio para un socket de dominio Unix. El valor predeterminado se toma del
PGHOST
variable de entorno, si se establece, de lo contrario, se intentará una conexión de socket de dominio Unix. -p port
--port=port
-
Especifica el puerto TCP o la extensión del archivo del socket del dominio Unix local en el que el servidor está escuchando las conexiones. Por defecto es
PGPORT
variable de entorno, si se establece, o un valor predeterminado compilado. -s interval
--status-interval=interval
-
Especifica el número de segundos entre los paquetes de estado enviados de vuelta al servidor de origen. Los valores más pequeños permiten un seguimiento más preciso del progreso de la copia de seguridad desde el servidor. Un valor de cero deshabilita por completo las actualizaciones de estado periódicas, aunque aún se enviará una actualización cuando lo solicite el servidor, para evitar desconexiones basadas en tiempos de espera. El valor predeterminado es 10 segundos.
-U username
--username=username
-
Especifica el nombre de usuario con el que conectarse.
-w
--no-password
-
Evita la emisión de una solicitud de contraseña. Si el servidor requiere autenticación de contraseña y una contraseña no está disponible por otros medios, como
.pgpass
archivo, el intento de conexión fallará. Esta opción puede ser útil en trabajos por lotes y scripts donde no hay ningún usuario presente para ingresar una contraseña. -W
--password
-
Obliga a pg_basebackup a solicitar una contraseña antes de conectarse al servidor de origen.
Esta opción nunca es esencial, ya que pg_basebackup solicitará automáticamente una contraseña si el servidor exige autenticación de contraseña. Sin embargo, pg_basebackup desperdiciará un intento de conexión al descubrir que el servidor quiere una contraseña. En algunos casos vale la pena escribir
-W
para evitar el intento de conexión adicional.
También hay otras opciones disponibles:
-V
--version
-
Imprime la versión pg_basebackup y sale.
-?
--help
-
Muestra ayuda sobre los argumentos y salidas de la línea de comando pg_basebackup.
Medio ambiente
Esta utilidad, como la mayoría de las otras utilidades de PostgreSQL, utiliza las variables de entorno admitidas por libpq (consulte Sección 33.14).
La variable de entorno PG_COLOR
especifica si se debe utilizar color en los mensajes de diagnóstico. Los valores posibles son always
, auto
y never
.
Notas
Al comienzo de la copia de seguridad, se debe realizar un punto de control en el servidor de origen. Esto puede llevar algún tiempo (especialmente si la opción --checkpoint=fast
no se utiliza), durante el cual pg_basebackup parecerá estar inactivo.
La copia de seguridad incluirá todos los archivos en el directorio de datos y los espacios de tabla, incluidos los archivos de configuración y cualquier archivo adicional colocado en el directorio por terceros, excepto ciertos archivos temporales administrados por PostgreSQL. Pero solo se copian los archivos y directorios normales, excepto que se conservan los enlaces simbólicos utilizados para los espacios de tabla. Los enlaces simbólicos que apuntan a ciertos directorios conocidos por PostgreSQL se copian como directorios vacíos. Se omiten otros enlaces simbólicos y archivos de dispositivos especiales. Ver Sección 52.4 para los detalles precisos.
En formato plano, los espacios de tabla se respaldarán en la misma ruta que tienen en el servidor de origen, a menos que la opción --tablespace-mapping
se utiliza. Sin esta opción, ejecutar una copia de seguridad base en formato plano en el mismo host que el servidor no funcionará si se utilizan espacios de tabla, porque la copia de seguridad tendría que escribirse en las mismas ubicaciones de directorio que los espacios de tabla originales.
Cuando se usa el formato tar, es responsabilidad del usuario descomprimir cada archivo tar antes de iniciar un servidor PostgreSQL que usa los datos. Si hay espacios de tabla adicionales, los archivos tar para ellos deben descomprimirse en las ubicaciones correctas. En este caso, los enlaces simbólicos para esos espacios de tabla serán creados por el servidor de acuerdo con el contenido del tablespace_map
archivo que se incluye en el base.tar
expediente.
pg_basebackup funciona con servidores de la misma versión principal o una anterior, hasta la 9.1. Sin embargo, el modo de transmisión WAL (-X stream
) solo funciona con la versión 9.3 y posterior del servidor, y el formato tar (--format=tar
) solo funciona con la versión de servidor 9.5 y posteriores.
pg_basebackup conservará los permisos de grupo para los archivos de datos si los permisos de grupo están habilitados en el clúster de origen.
Ejemplos de
Para crear una copia de seguridad base del servidor en mydbserver
y guárdelo en el directorio local /usr/local/pgsql/data
:
$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
Para crear una copia de seguridad del servidor local con un archivo tar comprimido para cada espacio de tabla y almacenarlo en el directorio backup
, mostrando un informe de progreso mientras se ejecuta:
$ pg_basebackup -D backup -Ft -z -P
Para crear una copia de seguridad de una base de datos local de un solo espacio de tabla y comprimirla con bzip2:
$ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2
(Este comando fallará si hay varios espacios de tabla en la base de datos).
Para crear una copia de seguridad de una base de datos local donde el espacio de tabla en /opt/ts
se reubica en ./backup/ts
:
$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts
Ver también
pg_dump
Anterior | Hasta | próximo |
ecpg | Hogar | pgbench |
Al final de todo puedes encontrar las interpretaciones de otros sys admins, tú incluso tienes la habilidad mostrar el tuyo si te apetece.