¿Ejecutar pg_dump en live db produce copias de seguridad consistentes?

37

Tengo una base de datos de 3GB que se modifica constantemente y necesito hacer copias de seguridad sin detener el servidor (Postgres 8.3).

Mi pg_dump funciona durante 5 minutos. ¿Qué pasa si los datos se modifican durante el proceso? ¿Recibo copias de seguridad consistentes? No quiero saber cuándo ocurre un desastre.

La documentación de Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html no dice nada al respecto.

romano
fuente
44
Hola roddick Recomiendo probar su proceso de restauración antes de que ocurra un desastre. Configure una máquina diferente y restaure usando una de sus copias de seguridad para probarla.
Derek Downey

Respuestas:

53

Del manual :

Realiza copias de seguridad consistentes incluso si la base de datos se usa simultáneamente.

Entonces sí, puede confiar en la copia de seguridad. Por supuesto, es PostgreSQL, puede confiar en sus datos en PostgreSQL.

Frank Heikens
fuente
10
Literalmente LOL'd cuando leí "puedes confiar en tus datos en PostgreSQL" :)
François Beausoleil
Un enlace al manual sería bueno
Pablo Fernández
1
@PabloFernandez: ¡Listo!
Frank Heikens
1
Sin embargo, una copia de seguridad lógica en una base de datos en vivo bloqueará sus tablas, no se pierda esta información. Tal vez usted encontrará algunos consejos: compose.com/articles/...
Tryp
Entonces, ¿qué tiene de gracioso eso? ¿Debo dejar de usar postgresql?
777Anon
12

pg_dump inicia una transacción, de manera similar a cómo funcionará cualquier otra consulta de larga duración. Las garantías de coherencia provienen de la implementación de MVCC . El volcado siempre será autoconsistente dentro de esas reglas.

Todas las partes difusas de MVCC están alrededor de cosas como el orden en que las transacciones de ACTUALIZACIÓN se vuelven visibles para otros clientes y cómo se adquieren los bloqueos. pg_dump es estricto con respecto al pedido y adquiere un bloqueo de lectura en toda la base de datos para volcarlo. Para la mayoría de las personas, eso es lo que esperan, y el mecanismo utilizado nunca causa problemas. El principal riesgo de concurrencia es que los clientes que intentan cambiar la estructura de la base de datos serán bloqueados mientras se ejecuta el volcado. Sin embargo, eso no afecta la calidad del vertedero.

Greg Smith
fuente
11

El volcado comienza con la configuración TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Lea el manual sobre Aislamiento de transacciones y, por ejemplo, la discusión de la Lista de usuarios al respecto .

Citar:

La copia de seguridad solo verá las transacciones que se confirmaron antes de establecer el nivel de aislamiento.

Básicamente todo después de pg_dumpestablecer el nivel de aislamiento de transacción no es parte de este volcado.

Las operaciones de lectura / escritura no se ven afectadas (bloqueadas) durante ese tiempo.

Dennis Nolte
fuente
-1

Primero perdón por responder en este viejo hilo. Pero desde mi experiencia no puedo confirmar la afirmación de que puede confiar en pg_dump /

Me cambié hace un mes por un proyecto para postgres. Y, por supuesto, hice todas las copias de seguridad con pg_dump del sistema en vivo como se sugirió. Pero después de la primera verificación de respaldo, descubrí que todos los volcados tienen diferentes tamaños. Después de restaurar algunos de ellos al azar, descubrí que faltan algunas tablas. Así que comencé a analizar por qué sucede esto y descubrí que si la aplicación superpuesta, por ejemplo, los servidores de aplicaciones, el bloqueo de algunas tablas y pg_dump no está esperando hasta que se publiquen. Siempre me necesitaban para detener el servidor durante el período de respaldo, lo cual no es una buena solución.

Así que todavía estoy buscando una solución, pero como dije, estoy totalmente en desacuerdo con la afirmación de que puedes confiar en pg_dump.

Pete Porter
fuente
Si eso sucede, sería grave en pg_dump. ¿Qué versión estás usando? Mi pregunta fue hace 3 años, y ahora estoy en 9.3 y los rojos de Amazon que aparentemente hacen copias de seguridad en vivo usando pg_dump. No pueden estar equivocados.
Romano
Puede confiar en pg_dump para hacer una copia de seguridad serializada (vea mi respuesta para enlaces / documentos y algunos detalles) Sin embargo, durante mis lecturas leí que no debería cambiar la estructura de la base de datos en sí, aunque no pude profundizar en eso . Como solo hacemos inserciones / actualizaciones / eliminaciones, no puedo comentar sobre creaciones de tablas. Para nosotros, me aseguré de no crear tablas durante el tiempo pg_dump.
Dennis Nolte
2
Sus declaraciones indican un error grave (¿presentó un informe de error?), Un error grave en la forma de volcar su base de datos o algún malentendido. Sin ningún hecho, uno no puede decidir entre estos.
dezso