2012-07-25 19 views
7

Estoy trabajando en un proyecto de Rails, y algunas veces lo programo en casa y otras veces en el trabajo. En mi proceso de desarrollo, agrego datos a la base de datos, y realmente necesito una forma de sincronizar las bases de datos en el hogar y el trabajo.Rake task para hacer una copia de seguridad y restaurar la base de datos

Estoy pensando en una tarea de Rake para hacer una copia de seguridad/restaurar toda la base de datos en una aplicación de Rails.
¿Hay alguna forma de hacerlo?

Respuesta

15

escribir una tarea rake:

namespace :db do 
    task :backup do 
    system "mysqldump --opt --user=root --password rose userdetails> xyz.sql" 
    end 

    task :restore do 
    system "mysqldump --user=root --password < xyz.sql" 
    end 
end 

Por el rake db:backup obtendrá el SQL que se puede confiar a su git/SVN y una vez que trabaja desde su casa para restaurar tire de él y correr rake db:restore

+3

Este es una buena solución y, como bonificación adicional, podría leer el nombre de usuario/contraseña del archivo database.yml. –

+3

El único problema con la tarea de restauración es que mysqldump escribe una 'TABLA DE DEJADAS' y luego 'CREAR TABLA ...' para cada tabla. Si escribe migraciones que agregan tablas y luego ejecuta '' rake db: restore' sin haber migrado correctamente, las tablas adicionales no se descartarán (ya que no las habría escrito mysqldump). Por lo tanto, si desea una restauración "verdadera", primero debe soltar todas las tablas existentes y luego cargar el archivo .sql. – istrasci

4

Utilizo una secuencia de comandos que vuelca la base de datos a una ubicación particular, y una segunda que recupera el volcado y lo utiliza para restaurar una base de datos especificada. Yo uso la gema Siempre que programar copias de seguridad diarias (llamando a la primera secuencia de comandos), poniendo esto en el archivo schedule.rb:

every :day, :at => "05:00" do 
    command "/var/www/current/script/db_backup.sh -n #{@db_name}" 
    end 

El contenido exacto de la secuencia de comandos de base de datos depende de lo que estés usando. Como estoy usando PostgreSQL, la secuencia de comandos de copia de seguridad, después de averiguar la ubicación adecuada para el vertedero, se ejecuta pg_dump:

pg_dump -F t -U username -f file_location<timestamp>.dat database_name 

Y el guión 'restaurar', que utilizo para copiar la copia de seguridad de producción a una base de datos local para pruebas, utiliza pg_restore:

pg_restore -U username -O -x -d database_name_new path/to/file 

Si está utilizando alguna otra base de datos, estas herramientas, obviamente, sería diferente, pero la mayoría de las bases de datos de copia de seguridad y restauración de apoyo de alguna forma.

Cuestiones relacionadas