MySQL Verständnisfrage bei neuem Feld hinzufügen

internet

Top Contributor
Hallo zusammen,

ich habe eine Verständnisfrage:
Angenommen ich habe ein produktives System, womit ich die DB nicht einfach mal dropen kann und die DB - Objekte neu anlegen kann.
Nun möchte ich eine neue Spalte hinzufügen, das nicht NULL sein darf.
Wie mache ich das in einem produktiven System?
Füge ich die Spalte einfach so hinzu, dann bekomme ich ja einen Fehler, da die bisherigen Datensätze nicht gefüllt sind.

Danke für Eure Hilfe.
 

Tobse

Top Contributor
Das Vorgehen nennt sich "staging". Es gibt da mehrere Möglichkeiten, das umzusetzen. Folgender ist meiner Meinung nach der einfachste:

Du hast 2 Server. Den Nicht-Produktiven Server (auch oft der Staging-Server genannt) nutzt man, um neue Features und Änderungen dem Team oder den Pilot-Kunden vorzustellen. Dieser Staging-Server kann für jede DB- und Software-Änderung offline gehen.
Steht nun ein neues Release an, räumt man auf dem Staging-Server auf. Danach stellt man die DNS-Einträge zu den Produktiv-Domains auf den Staging-Server um.
Etwa 2 Stunden später sollten alle DNS-Server die Änderung übernommen haben und alle Kunden arbeiten auf der neueren Software; die Server haben die Rollen getauscht. Beim nächsten Release das gleiche Spielchen noch einmal.

Eine von vielen Alternativen ist: Man nutzt einen fertigen (oder eigens implementierten) Deployment-Mechanismus. Er wendet alle Änderungen an der Produktivumgebung automatisiert an:

1. Server in den "Wartungsmodus" schalten
2. Änderungen anwenden
3. "Wartungsmodus" beenden

Dadurch, dass die Änderungen automatisiert (also von einer Software) angewendet werden, entsteht eine kurze Downtime. Bei Onlinegames ist das öfters der Fall. Da wird 1-2 Wochen im Vorraus angekündigt, dass die Server irgendwann Nachts von 4-5 Uhr "gewartet" werden.

EDIT:
P.S.: Bei der 2. Variante ist es fast unumgänglich, den Deployment-Vorgang für jedes Release auf einem Staging-Server zu testen. Dennn wenn dabei was schief geht, schmiert der Produktiv-Server ggf. komplett ab und muss händisch auf den Stand gebracht werden. Er ist dann anstatt der geplanten Stunde deutlich länger offline.
 
Zuletzt bearbeitet:

fehlerfinder

Bekanntes Mitglied
Tobse hat natürlich recht, dass du Änderungen erst einmal testen solltest.

Rein technisch kannst du einer MySQL-DB ganz einfach mit folgendem Kommando eine not-null-Spalte hinzufügen, welche dann mit einem (hoffentlich sinnvollen) Default-Wert gefüllt wird:

Code:
mysql> alter table t1 add nichtnullspalte varchar(20) not null default "test123";

Dann gibt's da noch die Server-Einstellung für den "strict mode". Davon abhängig kannst du auch in als "not null" deklarierten Spalten Null-Werte eingeben, weil dann ein vom Datentyp abhängiger Default gesetzt wird. Guck mal in der Doku unter dev.mysql.com (Achtung: MySLQ-Version beachten, da es da immer mal Veränderungen gibt, die durchaus wesentlich sein können).
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben