Heim  >  Artikel  >  Datenbank  >  So ändern Sie die Tabellenstruktur der MySQL-Datenbank online

So ändern Sie die Tabellenstruktur der MySQL-Datenbank online

WBOY
WBOYnach vorne
2022-09-05 17:45:282443Durchsuche

Empfohlenes Lernen: MySQL-Video-Tutorial

1. MDL-Metadatensperre

Bevor wir die Tabellenstruktur ändern, werfen wir einen Blick auf mögliche Probleme.

1. Was ist eine MDL-Sperre? MySQL verfügt über eine Sperre namens MDL-Metadatensperre. Wenn die Tabelle geändert wird, wird diese Sperre automatisch zur Tabelle hinzugefügt, d. h. es ist nicht erforderlich, sie explizit zu verwenden.

Beim Hinzufügen, Löschen, Ändern und Abfragen der Tabelle wird die MDL-Lesesperre hinzugefügt.
  • Beim Ändern der Tabellenstruktur wird die MDL-Schreibsperre hinzugefügt.
  • Lesen und Lesen schließen sich nicht gegenseitig aus Schreiben, Schreiben und Schreiben schließen sich gegenseitig aus.

Wenn ein Thread Hinzufügungen, Löschungen und Änderungen an der Tabelle vornimmt, blockiert er die Anforderungen anderer Threads, die Tabellenstruktur zu ändern.
  • Wenn ein Thread die Tabellenstruktur ändert , es blockiert die Anfragen anderer Threads für Tabellenergänzungen, Löschungen, Änderungen und Abfragen
  • 2. MDL-Sperrproblem

Und sobald die MDL gesperrt ist, wird sie erst freigegeben, nachdem die aktuell angeforderte Transaktion übermittelt wurde eine lange TransaktionOder es gibt eine große Menge an Online-Daten, und die MDL-Schreibsperre ist beim Ändern der Tabellenstruktur standardmäßig gesperrt, was sehr zeitaufwändig ist und andere nachfolgende Anforderungen blockiert.

Stellen Sie sich ein Szenario vor, in dem A(select), B(alter), C(select), D(select)... nacheinander Anfragen für dieselbe MySQL-Tabelle sind.

Wenn A (Auswahl) die MDL-Lesesperre der Tabelle erhält, wird B blockiert (Änderung), da B eine MDL-Schreibsperre hinzufügen muss. Nachdem B blockiert wurde, werden andere Anforderungen in der Warteschlange blockiert Dies führt schließlich dazu, dass die verfügbaren MySQL-Verbindungen erschöpft sind, es zu Zeitüberschreitungen bei Anfragen und anderen Problemen kommt.


2. So ändern Sie die MySQL-Tabellenstruktur online

Angesichts der oben genannten MDL-Sperre wissen wir, dass eine Änderung der Tabellenstruktur andere normale Anforderungen blockiert, daher sollte der Änderungsvorgang außerhalb der Spitzenzeiten durchgeführt werden. Normalerweise legen Sie es auf 2-4 Uhr morgens.

Spezifische Schritte:

Fügen Sie der Tabelle eine Lese-/Schreibsperre hinzu, sodass die Tabelle zu diesem Zeitpunkt schreibgeschützt ist.
  • Kopieren Sie die physische Struktur der ursprünglichen Tabelle.
  • Ändern Sie die physische Struktur der neuen Tabelle. Dazu gehören das Hinzufügen neuer Felder oder das Ändern anderer Tabellenstrukturen.
  • Importieren Sie die Tabellenstruktur in die neue Tabelle. Die Datensynchronisierung ist abgeschlossen. Sperren Sie die Zwischentabelle und löschen Sie die ursprüngliche Tabelle. Benennen Sie die neue Tabelle in den ursprünglichen Tabellennamen um. Lösen Sie die Sperre
  • Das Problem bei der oben genannten Lösung besteht darin, dass bei großen Datenmengen die Daten importiert werden müssen und während dieses Vorgangs nicht auf den Dienst zugegriffen werden kann.
  • Verbesserung:

Erstellen Sie eine neue Tabelle A_new, die mehrere Felder mehr als die ursprüngliche Tabelle hat, über ein Datenabonnement und synchronisieren Sie die Daten in der Online-Tabelle A mit dieser neuen Tabelle In A_new , dieser Vorgang wird fortgesetzt und Tabelle A kann während dieses Vorgangs hinzugefügt, gelöscht, geändert und überprüft werden. Es wird immer einen Moment geben, in dem die Daten der beiden Tabellen vollständig synchronisiert sind und es keinen Unterschied in den Daten gibt Diesmal wird der ursprüngliche Tabellenname A geändert und die neue Tabelle A_new in die ursprüngliche Tabelle A geändert. Dieser Vorgang ist ein kurzer Vorgang und kann sofort und ohne nennenswerte Auswirkungen abgeschlossen werden.

Vor- und Nachteile:

Der Vorteil besteht darin, dass der Synchronisierungsprozess das normale Geschäft des Originals nicht beeinträchtigt.

Der Nachteil besteht darin, dass während des Vorgangs zusätzlicher Speicherplatz zum Speichern der neuen Tabelle erforderlich ist. Nach Abschluss der Umbenennung kann die alte Tabelle gelöscht werden.

    Empfohlenes Lernen:
  • MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo ändern Sie die Tabellenstruktur der MySQL-Datenbank online. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen