2015-02-26 16 views
6

Ciao, ho un ruby ​​sull'app rails ospitato su heroku e sta usando mysql come database.Come estrarre il database mysql da heroku alla macchina locale

Ora devo fare il backup del database sul mio computer locale. Ma sto riscontrando problemi durante il backup.

Per questo ho installato taps gioiello e sto usando i seguenti comandi per esso

heroku pg:pull mysql2://[email protected]/heroku_database local_database --app my_app 

ma sta dando errore !Your app has no databases.

Può uno mi guida come tirare database mysql da Heroku al locale macchina.

EDIT

ho usato seguente sintassi per il comando

heroku pg:pull <REMOTE_SOURCE_DATABASE> <LOCAL_TARGET_DATABASE> 

e per ottenere REMOTE_SOURCE_DATABASE ho usato seguente comando

heroku config:get DATABASE_URL --app my_app 

Mi riferisco this link1 e link2 per più dettagliate documentazione di heroku.

+0

Mysql in locale .. giusto o entrambi in locale e l'host è MySql? –

+0

Non sono un ragazzo MySql, ma penso che un modo sia il seguente: connettersi al database remoto con uno degli strumenti di amministrazione MySql e DATABASE_URL forniti da ClearDB e scaricare i dati sul computer locale, quindi caricare questi dati scaricati nel database locale esistente. Poi migra a PostgreSQL e sii felice tutto il tempo, dato che Heroku ha un incredibile supporto per questo tipo di RDBMS – atomdev

+0

E un altro commento: Penso che _heroku pg: pull_ sia un comando solo per il servizio Heroku Postgres, così come non hai il database pg che vedi errore. Nei giorni precedenti, quando heroku supportava _taps_, c'erano comandi come _heroku db: pull_ e l'utente era in grado di migrare i dati tra diversi tipi di database, ma ora questa funzionalità è scomparsa. – atomdev

risposta

7

Il comando funziona solo con i database Postgres nell'app Heroku. Ma stai usando un provider MySQL di terze parti. Il tuo database è ospitato sui server ClearDB ed è disponibile per chiunque disponga delle credenziali corrette, inclusi sia il tuo server app su Heroku che la tua macchina dev.

Anche se non ci sono comandi speciali per estrarre il database, non è necessario alcuno strumento: è necessario eseguire semplicemente mysqldump.

mysqldump -h hostname.cleardb.com -u username heroku_database | mysql local_database

+0

ottenendo 'mysqldump: errore ottenuto: 1045: accesso negato per utente 'users'@'ip-xx-xx-xx.xx.xx.internal' (utilizzando la password: NO) quando si tenta di connettersi 'errore. – Shrikant1712

+1

aggiungi un'opzione '-p' e ti verrà richiesta la password – infused

+0

, ma ottieni lo stesso problema. –

0

Esecuzione $heroku config | grep ^DATABASE vi darà qualcosa di simile:

DATABASE_URL: mysql2://username:[email protected]/dbname?reconnect=true` 

Da lì è possibile costruire il vostro comando dump db:

mysqldump -h host -p -u username dbname | mysql local_database 

Questo vi chiederà di inserire la password che hai ricevuto dal comando precedente. Se si voleva creare uno script che dovrebbe includere automaticamente la password dal comando di Heroku si potrebbe fare qualcosa di simile:

mysqldump -u username --password=`heroku config | grep ^DATABASE | sed 's/.*[a-z0-9][a-z0-9]*:\([a-z][a-z0-9]*\).*/\1/'` -h host dbname | mysql cedric 

In questo modo è possibile avere uno script che importare il database senza richiedere alcun input da parte dell'utente, ma inoltre non espone la password al tuo database.

1

(Importante disclaimer:.. È MUST avete il vostro database.yml configurato correttamente in modo che questo lavoro non sono responsabile per eventuali dati che si perde a causa di esecuzione dello script di seguito)

Per Ruby on Rails utenti ...potresti prendere in considerazione la scrittura di un'attività Rake come questi db: clone attività di seguito.

Mi trovo a usare questo script costantemente per clonare dalla produzione allo sviluppo. È il modo più facile di ricordare la sintassi mysqldump, e tanto meno tutti i nomi utente e password coinvolti ...

Per clonare dalla produzione allo sviluppo:

rake db:clone:production

Per clone dalla messa in scena allo sviluppo :

rake db:clone:staging

Per clonare dalla produzione alla messa in scena:

rake db:clone:production_to_staging

Ed ecco il codice preferisci (e fare attenzione a impostare il vostro database.yml):

namespace :db do 
    namespace :clone do 

    class << self 
     %w(development test staging production).each do |env| 
     define_method("#{env}_db") do 
      Rails.configuration.database_configuration[env] 
     end 
     end 
    end 

    def clone_db(from_db, to_db) 
     start_time = Time.now 
     puts "Cloning Remote DB...." 
     system("mysqldump -h#{from_db['host']} -u#{from_db['username']} -p#{from_db['password']} #{from_db['database']} | mysql #{to_db['database']} -u#{to_db['username']} -p#{to_db['password']}") 
     puts "Import Successful" 
     end_time = Time.now 
     puts "====================" 
     puts "Job Completed: #{end_time - start_time} Seconds" 
    end 

    task :staging => :environment do 
     clone_db(staging_db, development_db) 
    end 

    task :production => :environment do 
     clone_db(production_db, development_db) 
    end 

    task :production_to_staging => :environment do 
     clone_db(production_db, staging_db) if Rails.env.staging? 
    end 

    end 
end 
Problemi correlati