2012-07-25 9 views
7

Sto lavorando a un progetto Rails ea volte programma a casa e talvolta al lavoro. Nel mio processo di sviluppo, aggiungo dati al database e ho davvero bisogno di un modo per sincronizzare i database a casa e al lavoro.Attività di rastrellamento per il backup e il ripristino del database

Sto pensando a un'attività Rake per eseguire il backup/ripristino dell'intero database in un'app Rails.
Esiste comunque?

risposta

15

scrivere la task 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 

Entro la rake db:backup si otterrà l'SQL che è possibile impegnarsi per il vostro git/svn e una volta che si lavora da casa per ripristinare tirarlo ed eseguire rake db:restore

+3

Questo è una buona soluzione e, come bonus extra, potrebbe leggere il nome utente/password dal file database.yml. –

+3

L'unico problema con l'attività di ripristino è che mysqldump scrive una 'DROP TABLE' quindi' CREATE TABLE ... 'per ogni tabella. Se si scrivono migrazioni che aggiungono tabelle e quindi si esegue 'rake db: restore' senza una corretta migrazione verso il basso, le tabelle aggiuntive non verranno eliminate (poiché non sarebbero state scritte da mysqldump). Quindi, se si desidera un ripristino "true", è necessario innanzitutto eliminare tutte le tabelle esistenti, quindi caricare il file .sql. – istrasci

4

Uso uno script che esegue il dump del database in una posizione particolare e un secondo che recupera il dump e lo utilizza per ripristinare un database specificato. Io uso la gemma Ogni volta che per programmare i backup giornalieri (chiamando il primo script), mettendo questo nel file schedule.rb:

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

Il contenuto esatto dello script dipende da quello del database che si sta utilizzando. Come sto usando PostgreSQL, lo script di backup, dopo capire la posizione corretta per la discarica, corre pg_dump:

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

E il 'ripristino' script, che io uso per copiare il backup di produzione a un database locale per testing, utilizza pg_restore:

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

Se stai usando qualche altro database, questi strumenti sarebbe ovviamente diversa, ma la maggior parte dei database di backup e ripristino di supporto in una qualche forma.

Problemi correlati