5 Stimmen

Wie kann man Datenbankänderungen auf einem Live-Server bereitstellen?

Ich habe ein Skript, das Teil meines Bereitstellungsprozesses ist, um DB-Änderungen auf den Produktionsserver zu übertragen. Wenn das Skript aus irgendeinem Grund meine Daten beschädigt (ein schlechtes Update), ist es schwierig, sie wiederherzustellen.

Ein Weg, dies zu lösen, besteht darin, die Anwendung für Benutzer herunterzufahren, während ein Update durchgeführt wird, sodass bei einem Problem einfach auf das Backup zurückgegriffen werden kann, das ich vor der Bereitstellung erstellt habe.

Aber ich habe von anderen gehört, die bereitstellen und ihre Seite weiterhin live lassen... Wie würden Sie das angehen, und wenn es schief geht, wie könnten Sie die Daten wiederherstellen, die seit Ihrem letzten Backup vor der Bereitstellung eingegangen sind?

1voto

Peter Eisentraut Punkte 33105

Dies ist im Allgemeinen ein kniffliges Problem, wie bei vielen Dingen in der Datenbankverwaltung. Es gibt im Grunde drei Möglichkeiten, dies anzugehen:

  1. Vermeiden Sie um jeden Preis einen Ausfall.
  2. Alles abschließen (und das Upgrade wirklich schnell durchführen).
  3. Es ist in Ordnung, Daten zu verlieren.

Wenn Sie ein komplexes System haben, isolieren Sie Ihre Komponenten entsprechend diesen oder ähnlichen Kategorien.

Verfügen Sie über ein Stagingsystem, um Upgrades zu testen. Das Stagingsystem ist mehr oder weniger eine Kopie des Produktionssystems; es ist separat vom Testsystem. Eine weitere Möglichkeit ist es, ein Audit- oder Logging-System zu haben, auf das Sie zurückgreifen können, wenn Sie Daten erneut abspielen müssen.

Das eigentliche Problem besteht darin, wenn Sie viel später feststellen, dass Ihr Upgrade fehlerhaft war. Dann sind Sie ziemlich beschädigt.

0voto

Scott Marlowe Punkte 7571

Wie groß ist deine Datenbank? Kannst du es dir leisten, Daten zu verlieren, die aktualisiert wurden, während der Kunde sie benutzt hat und bevor du zum Backup gehen musstest? Jeder Plan für die Bereitstellung beinhaltet irgendwo Kompromisse, und du musst entscheiden, welche Kompromisse am wenigsten schmerzhaft sind für das, was du tun möchtest.

Für einfache Websites, die nur pgsql ausführen, kannst du Clients trennen und das gesamte Update in einer großen Transaktion ausführen. Wenn ein Teil fehlschlägt, wird das gesamte Update rückgängig gemacht und es ist, als ob du nichts gemacht hättest. Leider funktioniert dies für andere Datenbanken nicht genau gleich, aber mit Flashback oder was auch immer Oracle es nennt, kannst du etwas Ähnliches erreichen.

Für größere, komplexe Websites, die auf einem replizierten DB-Server-Set laufen, werden die Dinge viel komplexer und viel schneller. An den Orten, an denen ich gearbeitet habe, haben wir Slony verwendet, und es verträgt sich nicht gut mit anderen, wenn du DDL-Änderungen bereitstellst, und du musst praktisch alle Kunden offline nehmen, während du DDL bereitstellst. Die Ausfallzeit beträgt jedoch bei uns nur wenige Minuten, selbst bei Datenbanken von fast 1TB Größe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X