¿Cómo maneja PostgreSQL los puntos de control en medio de una copia de seguridad habilitada para WAL?

17

En un PostgreSQL v9.0 tengo un sistema de archivo WAL funcionando. Entonces, WAL archiva regularmente un archivo (cuando se crean 3 WAL o si un WAL es anterior a 15 minutos).

Ahora agrego un paquete binario del directorio PG_DATA (excluyendo el subdirectorio pg_xlog). Para hacer eso, realizo una pg_start_backup(),copia binaria y a pg_stop_backup().

Creo que entiendo bastante bien lo que están haciendo pg_start_backup y pg_stop_backup, el primero hace un punto de control y el último asegura que el último archivo WAL esté archivado.

De la documentación oficial podemos ver que para la copia de datos binarios debemos:

Realice la copia de seguridad, utilizando cualquier herramienta conveniente de copia de seguridad del sistema de archivos, como tar o cpio (no pg_dump o pg_dumpall). No es necesario ni deseable detener el funcionamiento normal de la base de datos mientras lo hace.

Así que estoy bastante perplejo. Esto significa que se puede realizar un punto de control mientras hacemos la copia. Vi mucha documentación que indicaba que el comando de copia debería permitir cambios de datos al realizar la copia, estoy de acuerdo con eso, simplemente es cuestión de encontrar la herramienta adecuada. Pero mi pregunta es cómo postgreSQL manejará la recuperación con un contenido pg_data que contiene algunos archivos que son inconsistentes (algunos anteriores al punto de control, otros posteriores).

Al reproducir los registros de transacciones, Postgresql podrá poner todos estos archivos en el estado correcto. Vi que crear tablas y soltar operaciones son peligrosas mientras se realiza la copia de seguridad. ¿No hay algunas operaciones peligrosas como comandos de vacío ? ¿El pg_backup suspende las operaciones de vacío? ¿Debo hacer una copia del archivo global / pg_control al final del inicio del proceso de copia binaria? ¿Debo usar un sistema de archivos habilitado para instantáneas (como con una congelación xfs) para obtener un proceso de restauración más rápido?

Vi que un bloqueo del script de copia de seguridad no iniciará un pg_stop_backup automáticamente, por lo que existe la posibilidad de que mi estado de copia de seguridad viva durante mucho tiempo (hasta que mi nagios toque a alguien en algún lugar para arreglar el pg_stop_backup ()). Entonces, si algo es diferente en PostgreSQL entre estos dos grupos, me gustaría saberlo, para comprender qué impacto puede tener.

Iluminame por favor.

regilero
fuente

Respuestas:

7

Tu preguntaste:

cómo postgreSQL manejará la recuperación con un contenido pg_data que contiene algunos archivos que son inconsistentes.

pg_start_backup()asegúrese de que el archivo de datos sea al menos tan nuevo como el punto de control. En la recuperación, se aplican los registros.

Si los datos son antiguos, el registro los actualizará.

Si los datos son nuevos, el registro tendrá el mismo contenido. No hay dolor en escribirlo de nuevo.

Los datos nunca son más nuevos que el registro, porque los registros se escriben con anticipación (WAL).


Tu preguntaste:

... xfs-freeze...

xfs-freezees similar a pg_start_backup(), no toma una instantánea. Necesita un administrador de volúmenes para hacer eso.


Tu preguntaste:

... ¿por qué las declaraciones de creación de tablas y bases de datos no son compatibles si el WAL puede reproducir todo?

Es compatible, solo un pequeño truco. Ver http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Advertencias

Los comandos CREATE TABLESPACE se registran en WAL con la ruta absoluta literal y, por lo tanto, se reproducirán como creaciones de espacios de tabla con la misma ruta absoluta. Esto podría ser indeseable si el registro se está reproduciendo en una máquina diferente. Puede ser peligroso incluso si el registro se está reproduciendo en la misma máquina, pero en un nuevo directorio de datos: la reproducción aún sobrescribirá el contenido del espacio de tabla original. Para evitar posibles problemas de este tipo, la mejor práctica es tomar una nueva copia de seguridad base después de crear o descartar espacios de tabla.

J-16 SDiZ
fuente
sobre xfs-freeze Sé que esto también depende de un administrador de volúmenes, fue solo una parte del procedimiento de captura de imágenes. pero ¿estamos seguros de que la recuperación de WAL manejará bien la reproducción de los registros de una tabla previa al vacío en una tabla binaria posterior al vacío? ¿y es importante el contenido de global / pg_control? ¿Por qué las declaraciones de creación de tablas y bases de datos no son compatibles si el WAL puede reproducir todo?
regilero
CREATE TABLESPACEtrabajos. ver respuesta actualizada No estoy seguro VACUUM, pero no puedo imaginar por qué no lo hará.
J-16 SDiZ