2009-08-03 10 views

Respuesta

18

Una forma es usepg_dump para generar un volcado plano sql, que puede gzip o lo que sea. Esta es sin duda la opción más sencilla, ya que los resultados pueden enviarse nuevamente al psql para volver a cargar una base de datos y, como también puede exportar como texto sin formato, puede revisar o editar los datos antes de restaurarlos si es necesario.

El siguiente método es cerrar temporalmente su base de datos (o si su sistema de archivos es compatible con instantáneas atómicas, en teoría eso podría funcionar) y backup su directorio PostgreSQL data.

This La página del sitio PostgreSQL también explica cómo hacer copias de seguridad en línea y recuperación puntual, que es definitivamente el método más difícil de configurar, pero también el óptimo. La idea es realizar una copia de seguridad básica (que puede hacer todos los días, un par de días o una semana) ejecutando SQL especial (pg_start_backup y pg_stop_backup) y hacer una copia (nivel del sistema de archivos) del directorio de su base de datos. La base de datos no se desconecta durante este tiempo, y todo funciona igual de normal. A partir de ese momento, la base de datos genera un registro de escritura anticipada (WAL) de cualquier cambio, que luego puede ser empujado (automáticamente, por la base de datos) a donde usted desee. Para restaurar, toma la copia de seguridad básica, cárguela en otra instancia de base de datos y luego vuelva a reproducir todos los archivos WAL. De esta forma, también puede realizar una recuperación puntual al no reproducir todos los registros.

+0

Usando instantáneas atómicas no sólo "podría funcionar en teoría". Funciona perfectamente bien. Pero deben ser atómicos en * todos * sistemas de archivos en los que PostgreSQL tiene datos, incluido el directorio pg_xlog. –

+0

Normalmente uso pg_dump para hacer mis copias de seguridad, pero estaba buscando una solución completa que utilizara pg_dump para crear copias de respaldo giradas, algo así como http://sourceforge.net/projects/automysqlbackup/. Sería incluso mejor si el script utilizara copias de seguridad en línea, pero creo que no debería ser difícil hacerlo yo mismo y ponerlo en Launchpad o en algún otro lado. Gracias por su respuesta. –

+1

para una forma automática de realizar copias de seguridad de pg_dump con encriptación de clave pública/contraseña, rotación y carga en S3 check out safe: http://github.com/astrails/safe –

2

Generalmente la forma de hacer copias de seguridad de es usar pg_dump.

No debe "copiar archivos del directorio postgresql, al igual que en mysql", porque es probable que no pueda usarlos (estos archivos son dependientes de la arquitectura, el sistema operativo y las opciones de compilación).

A menos que pg_dump sea probado insuficiente, esto es lo que debe usar. Después de estar en una situación en la que no se puede usar pg_dump, debe preguntarse: por qué no se puede usar y qué puede hacer para volver a utilizarlo :)

Al usar pg_dump, puede elegir el volcado de archivos SQL sin formato (-F p), o formato personalizado (-F c). El volcado SQL es más fácil de modificar/cambiar, pero el formato personalizado es mucho más potente y (desde 8.4) más rápido de cargar, porque puede cargarlo en muchos trabajadores paralelos en lugar de cargarlo secuencialmente.

3

Para copias de seguridad automatizadas de ambos MySQL Y Postrgres echa un vistazo a astrails-safe on github (o simplemente "gem install astrails-safe --source=http://gems.github.com"). Utiliza mysqldump para hacer una copia de seguridad de MySQL y pg_dump para hacer una copia de seguridad de Postgres. También sabe cómo hacer copias de seguridad de archivos sin formato con tar y encriptar todo con GnuPG y cargarlo a S3, o cualquier servidor Unix con SFTP.

2

Dado que ha especificado databaseS, pg_dumpall le será mucho más útil. Vacia todas las bases de datos y usuarios en un archivo sql en lugar de uno solo.

0

Esto es lo que me gustaría hacer una copia de seguridad de mi base de datos antigua y restaurar

Para hacer una copia de seguridad de su base de datos

pg_dump --format=c olddb_name > db_dump_file.dump 

Para restaurar la copia de seguridad

pg_restore -v -d newdb_name db_dump_file.dump 

Leer más en pg_dump y pg_restore

Cuestiones relacionadas