En PostgreSQL 13 se han incluido dos novedades que afectan a las copias de seguridad a nivel físico, una es que la herramienta pg_basebackup crea un archivo de manifiesto con los ficheros existentes en el backup incluyendo sus tamaños y la otra novedad, es una nueva herramienta llamada pg_verifybackup.
¿Qué hace y para qué se utiliza pg_verifybackup?
Esta herramienta compara los ficheros del backup con el archivo de manifiesto para verificar la integridad de los datos y detectar problemas de almacenamiento o errores del usuario. Dado que cuando creamos una copia de seguridad de los datos a nivel físico, no podemos conocer si el backup se realizó correctamente o la integridad de los datos hasta que no se realice una recuperación del backup.
Por ello una de las novedades implementadas en PostgreSQL 13 es la posibilidad de verificar un backup creado mediante la herramienta pg_basebackup.
Hay que tener en cuenta que la validación que realiza la herramienta pg_verifybackup no incluye ni puede incluir todas las comprobaciones que realizaría un servidor en ejecución al recuperar la copia de seguridad. Por lo tanto , es conveniente realizar restauraciones de prueba y verificar que las bases de datos resultantes funcionen como se espera.
Etapas de la herramienta pg_verifybackup
La verificación de la copia de seguridad se realiza en cuatro pasos:
- Primero, la herramienta pg_verifybackup lee el archivo de manifiesto del backup “backup_manifest”, creado por la herramienta pg_basebackup. Si este archivo no existe, no se puede leer, tiene un formato incorrecto o falla la verificación de su propia suma de comprobación (checksum) interna, la herramienta pg_verifybackup mostrará un error.
- En segundo lugar, la herramienta pg_verifybackup comprueba que los archivos de datos almacenados en el directorio del backup sean exactamente los mismos que se incluyen el archivo de manifiesto. Se detectarán archivos extras y faltantes con algunas excepciones, en este paso se ignora la presencia, ausencia o cualquier modificación en los ficheros postgresql.auto.conf, standby.signal y recovery.signal, dado que estos archivos pueden haber sido creados o modificados como parte del proceso de la copia de seguridad. Tampoco emitirá error si encuentra el archivo “backup_manifest” dentro del directorio de destino y si no hay ningún archivo dentro del directorio pg_wal, ya que estos archivos no aparecerán en el manifiesto de respaldo.
- A continuación, la herramienta pg_verifybackup realiza una suma de todos los archivos y comparará el checksum con el valor del manifiesto. En el caso de que no coincida el checksum calculado con el checksum almacenado en el manifiesto, emitirá errores. Este paso no se realiza para los archivos que produjeron errores en el paso anterior, ya que se sabe que tienen problemas y se ignoran los archivos ignorados en el paso anterior.
- Por último, la herramienta pg_verifybackup utilizará el manifiesto para verificar que los registros WAL que se necesitarán para recuperar la copia de seguridad están presentes y que se pueden leer y analizar. El archivo “backup_manifest” contiene información acerca de los ficheros WAL que serán necesarios y pg_verifybackup ejecutará la herramienta pg_waldump para analizar los registros WAL. Tenga en cuenta que esta herramienta no los comprobará si hay archivos WAL adicionales que no son necesarios para recuperar la copia de seguridad. Para ello puedes utilizar la herramienta pg_waldump por separado. Para verificar los registros WAL, también hay que tener en cuenta la versión de las herramientas pg_verifybackup y pg_waldump, ya que deben de coincidir con la versión del backup que se está verificando.
Argumentos de la herramienta pg_verifybackup
Estas opciones se especifican en la línea de comandos de la herramienta pg_verifybackup.
Finaliza la verificación del backup en el momento que encuentra un error.
-e
–exit-on-error
Ignora cualquier ruta o archivo que se encuentre en el directorio de datos y no en el fichero de manifiesto, evitando que exista una discrepancia entre ambos y por lo tanto la verificación de los datos no se vería satisfactoria. Se puede agregar más de una vez. Esto se utiliza en el caso de haber agregado un fichero de forma manual dentro del directorio de datos posteriormente al backup.
-i path
–ignore=path
Le indicas el archivo de manifiesto que debe de utilizar para realizar la comparación con el directorio de datos. Por defecto utiliza el manifiesto creado dentro del directorio del backup.
-m path
–manifest-path=path
No analiza los registro WAL que son necesarios para restaurar la copia de seguridad.
-n
–no-parse-wal
Si la verificación del backup es satisfactoria, con esta opción se evita que muestre el resultado.
-q
–quiet
No verifica las sumas de comprobación de archivos de datos. La presencia o ausencia de archivos y los tamaños de esos archivos se seguirán verificando. Esto es mucho más rápido, porque los archivos en sí no necesitan ser leídos.
-s
–skip-checksums
Le indicas la ubicación de los registros WAL. Por defecto utiliza el directorio pg_wal dentro del directorio del backup.
-w path
–wal-directory=path
Te muestra la versión de la herramienta pg_verifybackup.
-V
–version
Muestra la ayuda sobre los argumentos anteriormente mencionados de la herramienta pg_verifybackup.
-?
–help
Ejemplo de utilización
Lo primero que se debe de realizar es un backup físico del directorio de datos, utilizando la herramienta pg_basebackup. En este caso he realizado un backup físico del directorio “data” (PGDATA) excluyendo los ficheros WAL. Me muestra una advertencia, dado que los registros WAL no se están copiando a otra ubicación.
Esta es la sintaxis que he utilizado:
./bin/pg_basebackup -h localhost -p 5433 -X none -D /home/todopostgresql_slave/copy_data -P
Con esta herramienta te crea automáticamente dentro del directorio “data” el fichero “backup_manifest“, donde puedes observar que comprueba el tamaño, las modificaciones de cada uno de los ficheros y crea un checksum propio por cada archivo y uno al final de todo el conjunto de archivos. Este es el fichero que es utilizado por la herramienta pg_verifybackup.
Lo siguiente es ejecutar la herramienta pg_verifybackup.
En este caso no le indico ninguna opción, por lo tanto también verificará los registros WAL, los cuales no han sido copiados en el backup y por ello falla la verificación.
Esta es la sintaxis que he utilizado:
./bin/pg_verifybackup /home/todopostgresql_slave/copy_data/
Para solucionarlo, he de indicar la opción “-n” para que no revise los registros WAL.
Esta es la sintaxis que he utilizado:
./bin/pg_verifybackup -n /home/todopostgresql_slave/copy_data/
Conclusión
La herramienta pg_verifybackup es una buena herramienta que te ayudará a comprobar muchos de los posibles errores que puede tener una copia de seguridad física, antes de ser restaurada.