Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL aktualisiert die gesamte Datenbank ohne Ausfallzeiten

Hier ist etwas, was ich tue. Es führt nicht zu null Ausfallzeiten, könnte aber in weniger als einer Sekunde abgeschlossen sein.

Erstellen Sie eine Datenbank, die nur Schnittstellenelemente zu Ihrer echten Datenbank hat. In meinem Fall enthält es nur Ansichtsdefinitionen, und alle Benutzeranfragen durchlaufen diese Datenbank.

Erstellen Sie jede Nacht eine neue Datenbank. Aktualisieren Sie anschließend die Ansichtsdefinitionen so, dass sie auf die neue Datenbank verweisen. Ich würde empfehlen, entweder den Benutzerzugriff auf die Datenbank mit den Ansichten zu deaktivieren, während Sie sie aktualisieren, oder alle Ansichten zu löschen und neu zu erstellen - dies verhindert einen teilweisen Zugriff auf die alte Datenbank. Da das Erstellen von Ansichten schnell ist, sollte dies ein sehr schneller Vorgang sein.

Wir machen das alles durch einen Job. Bevor wir die Produktionsansichten ändern, testen wir die Ansichtserstellung in einer anderen Datenbank, um sicherzustellen, dass sie alle funktionieren.

Offensichtlich, wenn Sie alter view verwenden Anstatt Konsistenz über alle Ansichten hinweg zu verlangen, gibt es keine Ausfallzeit, sondern nur eine kurze Zeit der Inkonsistenz.