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.
Questo è una buona soluzione e, come bonus extra, potrebbe leggere il nome utente/password dal file database.yml. –
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