webentwicklung-frage-antwort-db.com.de

Wie übertrage ich die Produktionsdatenbank mit pgbackups auf Heroku? Fehler bekommen

Auf Heroku versuche ich, die Produktionsdatenbank mit dem Add-In für pgbackups in meine Staging-App zu kopieren. Ich habe die Anweisungen auf der Addon-Seite befolgt: https://devcenter.heroku.com/articles/pgbackups

Zuerst habe ich die Datenbank erfasst:

heroku pgbackups:capture --app production-app 

Das hat funktioniert:

HEROKU_POSTGRESQL_PURPLE (DATABASE_URL)  ----backup--->  b238

Capturing... done
Storing... done

Jedoch, wenn ich versuche, es in der Staging-App wiederherzustellen:

heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --remote staging

Ich erhalte folgende Fehlermeldung:

DATABASE_URL does not match any of your databases
 !    Could not resolve database DATABASE
 !    
 !    Available databases: 

Ich habe auch versucht, die vollständige URL einzugeben:

 heroku pgbackups:url b238 --app production-app
 heroku pgbackups:restore DATABASE "https://s3.amazonaws.com/..." --remote staging

und versuchte auch, die App zu benennen (anstelle von --remote staging):

heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app

Nichts davon funktionierte. Es ist interessant zu beachten, dass die Fehlermeldung besagt, dass es keine "verfügbaren Datenbanken" gibt. Ich gehe davon aus, dass es sich um die Staging-App handelt, die tatsächlich leer ist. Wenn ich tippe:

heroku pgbackups

Ich bekomme:

 !    No backups. Capture one with `heroku pgbackups:capture`.

Um die verfügbaren Backups (Produktion) zu finden, muss ich Folgendes eingeben:

heroku pgbackups --app production-app

und ich bekomme die Liste der aktuellen Sicherungen. Ich weiß nicht, ob dies normal ist oder sogar, ob es mit dem Problem zusammenhängt, aber ich dachte, ich sollte es erwähnen. 

Ich habe jede Antwort hier auf SO gelesen und ausprobiert, aber nichts hat funktioniert. Irgendwelche Ideen?

41
Luciano

Update für Mitte 2017 (Diebstahl von Takehiro Mouri - Vereinfachung des Teils DATABSE_NAME)

Update für Mitte 2015 ...

Das pgbackups-Add-on wurde nicht mehr unterstützt. Nicht mehr pgbackups:transfer.

So kopieren Sie eine Datenbank von yourapp nach yourapp_staging:

# turn off the web dynos in staging
heroku maintenance:on -a yourapp-staging

# if you have non-web-dynos, do them too
heroku ps:scale worker=0 -a yourapp-staging

# backup the staging database if you are paranoid like me (optional)
heroku pg:backups capture -a yourapp-staging

# execute the copy
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging

Wenn es fertig ist, schalten Sie die Inszenierung wieder ein:

# this is if you have workers, change '1' to whatever
heroku ps:scale worker=1 -a yourapp-staging

heroku maintenance:off -a yourapp-staging

(Quelle: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default )

74
Lucas Nelson

UPDATE: Das funktioniert nicht mehr. Bitte beziehen Sie sich auf @ lucas-nelsons answer unten.

Damit ist es jetzt noch einfacher. Checkout des transferbefehls als Teil von pgbackups

heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi

https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups#transfering-databases- zwischen-heroku-anwendungen

Das hat wunderbar funktioniert, wenn ich den Produktionscode mit auf meine Staging-Site gebracht habe.

15
Jonathon Batson

UPDATE: Sie können diesen Befehl ausführen, um die Datenbank von der Produktion zum Staging zu übertragen: heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging

Sie werden aufgefordert, die Aktion zu bestätigen. Sobald Sie dies getan haben, werden alle Daten migriert.

15
Takehiro Mouri

Hier ist eine einfache und sichere Lösung mit Herokus Zusatzgeräten und Gabelungen. Es sind keine Sicherungen, keine Ausfallzeiten und keine Datenbank überschrieben.

Sie müssen zuerst die Produktionsdatenbank an die Staging-App anschließen und dann die Staging-App aufrufen. Wenn Sie sich in der Produktions-App verzweigen, dann an die Staging-App anschließen, wird die Abrechnungs-App die Produktions-App, und Sie können die Gabel nicht von ihr trennen.

1. Ermitteln Sie zuerst den Add-On-Namen Ihrer Produktionsdatenbank (hier ist es postgres-prod-123):

$ heroku addons --app myapp-production
heroku-postgresql (postgresql-prod-123)  standard-0  $50/month
 └─ as DATABASE

2. Dann Attach das Add-On der Produktionsdatenbank an Ihre Staging-App. Vergeben Sie einen Namen wie PRODUCTION_DB, damit Sie ihn leicht erkennen können:

$ heroku addons:attach postgresql-prod-123 --app myapp-staging --as PRODUCTION_DB

3. Dann Erstellen Sie einen Fork der Produktionsdatenbank in der Staging-App:

$ heroku addons:create heroku-postgresql:standard-0 --fork PRODUCTION_DB_URL --as STAGING_DB --app myapp-staging

4. Steigern Sie die Gabel schließlich als primäre Datenbank Ihrer Staging-App:

$ heroku pg:promote STAGING_DB --app myapp-staging

Erledigt! Ihre Staging-App verwendet jetzt eine Kopie Ihrer Produktionsdatenbank. Beachten Sie, dass Ihre vorherige Staging-Datenbank noch vorhanden ist. Möglicherweise möchten Sie sie löschen, nachdem Sie sichergestellt haben, dass alles funktioniert.

Trennen Sie zum Bereinigen die Produktionsdatenbank von der Staging-App:

$ heroku addons:detach postgresql-prod-123 --app myapp-staging
9
davb

Das funktioniert für mich: heroku pg:copy you-app-production::DATABASE DATABASE -a you-app-staging

5
Josh

Erstellen Sie zunächst eine aktuelle Sicherung der Produktion:

heroku pgbackups:capture -a productionappslug --expire

Finden Sie heraus, in welcher Farbe Heroku Ihre Datenbank benannt hat.

https://postgres.heroku.com/databases oder https://dashboard.heroku.com/apps/STAGINGAPPSLUG/resources

Laden Sie dann das Produktions-DB-Backup in das Staging (ändern Sie ROT in jede Farbe):

heroku pgbackups:restore HEROKU_POSTGRESQL_RED -a stagingappslug `heroku pgbackups:url -a productionappslug`

stagingappslug und liveappslug sind die Kurznamen, die Ihre Heroku-Apps heißen.

1
Daniel Morris

Sie können dies mit dem folgenden Befehl tun

heroku pg:copy <production_app_name>::HEROKU_POSTGRESQL_BLACK_URL OLIVE -a <staging_app_name> --confirm <staging_app_name>
1

Um die Produktions- Datenbank (Quelle Datenbank) in die Staging Datenbank (Ziel Datenbank) zu übertragen (zu kopieren), müssen Sie pg:copy aufrufen. aus der Anwendung target, die auf eine source -Datenbank verweist.

heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application

Ein anderes Beispiel:

heroku pg:copy my-production-app::HEROKU_POSTGRESQL_OLIVE HEROKU_POSTGRESQL_PINK --app my-staging-app

Um die Farbnamen Ihrer Datenbanken zu erhalten, verwenden Sie:

heroku pg --app my-production-app
heroku pg --app my-staging-app

Siehe pg: copy

1
user664833

Ich hatte mit dem gleichen Problem zu kämpfen. Entsprechend der Antwort auf diese Frage könnte das Problem Ihre Heroku-Edelstein-Version sein. Ich habe gerade meine Version aktualisiert (von 2.26.2 auf 2.26.6) und jetzt funktioniert es.

1
kbjerring

Nach keinem Glück. (Ich benutze Heroku-Edelstein 2.31.4) .__ Ich habe folgendes getan (Hilfe für die Müden)

  1. Melden Sie sich an der Heroku Database Console an

  2. Melden Sie sich bei Staging> "Einstellungen"> PGRestore> "Verbindungseinstellungen" in eine Textdatei an.

  3. Melden Sie sich bei Produktion> Snapshots an, drücken Sie '+', um ab sofort ein neues Backup zu erstellen. Dann drücken Sie Download. Laden Sie In den Ordner apps/tmp oder wo immer Sie möchten.

  4. Staging auf Wartungsmodus setzen 

    $ heroku wartung: ein

  5. Führen Sie den Befehl wie folgt aus, mit Connection Settings Text und Dump-Datei am Ende: PGPASSWORD = {... Bits von Zeug hier ...} -p 5432 'tmp/b048.dump.dump'

  6. Nach dem Lauf: 

    $ heroku wartung: aus

  7. Melden Sie sich bei der Inszenierung an und prüfen Sie, ob die Dinge übereinstimmen. Suchen Sie nach einer kürzlich durchgeführten Transaktion, von der Sie wissen, dass sie sich in der Produktion befindet. $ heroku führt die Konsole für beide Apps aus und überprüft, ob die IDs übereinstimmen.

0
Evolve

Ich denke, dass es nicht --remote ist --app - versuchen Sie folgendes:

heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
0
Fernando Caride

Das hat bei mir funktioniert

  • Laden Sie das Backup von der Heroku-Konsole herunter und laden Sie es in S3 hoch. 
  • heroku pg:backups restore 'DUMP_FILE_URL_FROM_S3' DATABASE --app MY_APP
0
Saqib R.