pg_verifybackup — verifica la integridad de una copia de seguridad base de un clúster de PostgreSQL
pg_verifybackup [option...]
pg_verifybackup se utiliza para comprobar la
integridad de una copia de seguridad de un clúster de bases de datos realizada con
pg_basebackup frente a un archivo
backup_manifest generado por el servidor en el momento
de la copia de seguridad. La copia de seguridad se puede almacenar en formato
«plain» (texto plano/directorio) o «tar»; esto incluye las copias de seguridad en formato
tar comprimidas con cualquier algoritmo admitido por pg_basebackup.
Sin embargo, en la actualidad, la verificación de WAL solo
se admite para copias de seguridad en formato plain. Por lo tanto, si la copia de
seguridad se almacena en formato tar, se debe usar la opción
-n, --no-parse-wal.
Es importante tener en cuenta que la validación realizada por pg_verifybackup no incluye ni puede incluir todas las comprobaciones que realizará un servidor en ejecución al intentar utilizar la copia de seguridad. Incluso si utilizas esta herramienta, deberías realizar restauraciones de prueba y verificar que las bases de datos resultantes funcionen como se espera y que parezcan contener los datos correctos. Sin embargo, pg_verifybackup puede detectar muchos problemas que ocurren comúnmente debido a problemas de almacenamiento o errores del usuario.
La verificación de la copia de seguridad se realiza en cuatro etapas. En primer lugar,
pg_verifybackup lee el archivo
backup_manifest. Si ese archivo
no existe, no se puede leer, está mal formado, no coincide con el identificador del
sistema con pg_control del directorio de copia de seguridad o
no supera la verificación frente a su propia suma de comprobación interna,
pg_verifybackup terminará con un error fatal.
En segundo lugar, pg_verifybackup intentará verificar que
los archivos de datos almacenados actualmente en el disco sean exactamente los mismos
que el servidor pretendía enviar, con algunas excepciones que se describen a
continuación. Se detectarán archivos adicionales y faltantes, con algunas excepciones.
Este paso ignorará la presencia o ausencia de, o cualquier modificación en,
postgresql.auto.conf, standby.signal y
recovery.signal, porque se espera que estos archivos se hayan
creado o modificado como parte del proceso de realización de la copia de seguridad.
Tampoco se quejará de un archivo backup_manifest en el directorio
de destino o de cualquier cosa dentro de pg_wal, a pesar de que
estos archivos no aparecerán listados en el manifiesto de la copia de seguridad. Solo
se comprueban los archivos; no se verifica la presencia o ausencia de directorios,
excepto indirectamente: si falta un directorio, cualquier archivo que debería haber
contenido también faltará necesariamente.
A continuación, pg_verifybackup calculará la suma de comprobación
de todos los archivos, comparará las sumas de comprobación con los valores del
manifiesto y emitirá errores para cualquier archivo cuya suma de comprobación
calculada no coincida con la almacenada en el manifiesto. Este paso no se realiza
para ningún archivo que haya producido errores en el paso anterior, ya que ya se sabe
que tienen problemas. Los archivos que fueron ignorados en el paso anterior también se
ignoran en este paso.
Finalmente, pg_verifybackup utilizará el manifiesto para
verificar que los registros de escritura anticipada necesarios para recuperar la copia
de seguridad estén presentes y que se puedan leer y analizar. El
backup_manifest contiene información sobre qué registros de
escritura anticipada serán necesarios, y pg_verifybackup utilizará
esa información para invocar a pg_waldump para analizar dichos
registros. Se utilizará la opción --quiet, de modo que
pg_waldump solo informará errores, sin generar ninguna otra
salida. Aunque este nivel de verificación es suficiente para detectar problemas obvios,
como la falta de un archivo o uno cuyas sumas de comprobación internas no coincidan,
no es lo suficientemente amplio como para detectar todos los posibles problemas que
podrían ocurrir al intentar la recuperación. Por ejemplo, un fallo del servidor que
produzca registros de escritura anticipada con sumas de comprobación correctas pero
que especifiquen acciones sin sentido no se puede detectar con este método.
Ten en cuenta que si hay archivos WAL adicionales que no son necesarios para recuperar
la copia de seguridad, no serán comprobados por esta herramienta, aunque se podría
utilizar una invocación independiente de pg_waldump para ese
propósito. También ten en cuenta que la verificación de WAL es específica de cada
versión: debes utilizar la versión de pg_verifybackup y, por tanto,
de pg_waldump, que corresponda a la copia de seguridad que se está
comprobando. En cambio, las comprobaciones de integridad de los archivos de datos
deberían funcionar con cualquier versión del servidor que genere un archivo
backup_manifest.
pg_verifybackup acepta los siguientes argumentos de línea de comandos:
-e--exit-on-error
Termina tan pronto como se detecte un problema con la copia de seguridad. Si
no se especifica esta opción, pg_verifybackup continuará
comprobando la copia de seguridad incluso después de haber detectado un problema,
e informará de todos los problemas detectados como errores.
-F format--format=format
Especifica el formato de la copia de seguridad. El format
puede ser uno de los siguientes:
pplainLa copia de seguridad consiste en archivos planos con la misma distribución que el directorio de datos y los tablespaces del servidor de origen.
ttar
La copia de seguridad consiste en archivos tar, que pueden estar
comprimidos. Una copia de seguridad válida incluye el directorio de datos
principal en un archivo llamado base.tar, los
archivos WAL en pg_wal.tar y archivos tar
independientes para cada tablespace, nombrados según el OID del
tablespace. Si la copia de seguridad está comprimida, se añade la extensión
de compresión correspondiente al final de cada nombre de archivo.
-i path--ignore=path
Ignora el archivo o directorio especificado, que debe expresarse como una
ruta relativa, al comparar la lista de archivos de datos realmente
presentes en la copia de seguridad con los enumerados en el archivo
backup_manifest. Si se especifica un directorio, esta
opción afecta a todo el subárbol con raíz en esa ubicación. Las quejas sobre
archivos adicionales, archivos faltantes, diferencias de tamaño de archivos o
discrepancias de suma de comprobación se suprimirán si la ruta relativa coincide
con la ruta especificada. Esta opción se puede especificar varias veces.
-m path--manifest-path=pathUtiliza el archivo de manifiesto en la ruta especificada, en lugar del ubicado en la raíz del directorio de copia de seguridad.
-n--no-parse-walNo intenta analizar los datos del registro de escritura anticipada que serán necesarios para recuperarse de esta copia de seguridad.
-P--progressHabilita el reporte de progreso. Activar esto ofrecerá un informe de progreso mientras se verifican las sumas de comprobación.
Esta opción no se puede utilizar junto con la opción
--quiet.
-q--quietNo imprime nada cuando una copia de seguridad se verifica correctamente.
-s--skip-checksumsNo verifica las sumas de comprobación de los archivos de datos. Aún así se comprobará la presencia o ausencia de archivos y el tamaño de los mismos. Esto es mucho más rápido, porque no es necesario leer los archivos en sí.
-w path--wal-directory=path
Intenta analizar los archivos WAL almacenados en el directorio especificado, en
lugar de en pg_wal. Esto puede ser útil si la copia de
seguridad se almacena en una ubicación independiente del archivo WAL.
También están disponibles otras opciones:
-V--versionMuestra la versión de pg_verifybackup y termina.
-?--helpMuestra la ayuda sobre los argumentos de línea de comandos de pg_verifybackup y termina.
Para crear una copia de seguridad base del servidor en mydbserver y
verificar la integridad de la copia de seguridad:
$pg_basebackup -h mydbserver -D /usr/local/pgsql/data$pg_verifybackup /usr/local/pgsql/data
Para crear una copia de seguridad base del servidor en mydbserver, mover
el manifiesto a algún lugar fuera del directorio de copia de seguridad y verificar la
copia de seguridad:
$pg_basebackup -h mydbserver -D /usr/local/pgsql/backup1234$mv /usr/local/pgsql/backup1234/backup_manifest /my/secure/location/backup_manifest.1234$pg_verifybackup -m /my/secure/location/backup_manifest.1234 /usr/local/pgsql/backup1234
Para verificar a copia de seguridad ignorando un archivo que se agregó manualmente al directorio de copia de seguridad, y omitiendo también la verificación de la suma de comprobación:
$pg_basebackup -h mydbserver -D /usr/local/pgsql/data$edit /usr/local/pgsql/data/note.to.self$pg_verifybackup --ignore=note.to.self --skip-checksums /usr/local/pgsql/data