Heim  >  Artikel  >  Datenbank  >  So erweitern Sie die Felder großer Tabellen unter MySQL-Kaskadenreplikation

So erweitern Sie die Felder großer Tabellen unter MySQL-Kaskadenreplikation

WBOY
WBOYnach vorne
2023-05-29 23:13:39789Durchsuche

Felderweiterung großer Tabellen unter MySQL-Kaskadenreplikation

1. Das Unternehmen eines Kunden verfügt über eine Tabelle mit etwa 400 Millionen Zeilen. open_id varchar(50) in der Tabelle muss auf varchar(500) erweitert werden ) ).

Versuchen Sie während der Änderung, die Auswirkungen auf die Hauptbibliothek so gering wie möglich zu halten (vorzugsweise keine Auswirkungen -> Letztendlich haben wir einen Fensterzeitraum von 4 Stunden angestrebt).


2. Datenbanktabelleninformationen

Umgebung: Mysql 8.0.22

1 Master-1-Slave-Kopie basierend auf Gtid


1. Die erste Frage: Ist das eine große Tabelle? Die Datei hat eine Größe von 280 G + die Anzahl ist schon lange nicht mehr zurückgekommen. + Ich habe die Standby-Datenbank verwendet, um zu überprüfen und zu bestätigen, dass die Anzahl der Zeilen > 400 Millionen beträgt Änderungen?

3. Lösungsauswahl

M unten stellt die Hauptbibliothek dar, S1 ist Slave 1, S2 ist Slave 2

Methode

Vorteile
NachteileMachbarkeit OnlineDDLnativ, bei Verwendung einer temporären ZwischentabelleALGORITHM=COPY wird DML blockiert. Empfohlene Version >MySQL5.75 SterneGh-ostVerwenden Sie Binlog + Replay-Thread anstelle von Trigger Dritter. Party-Tools führen abhängig von verschiedenen Parametern zu längeren Ausführungszeiten4 SternePt-oscDie Versionskompatibilität ist gut, es werden Trigger verwendet, um die Haupt- und Sekundärtabellen konsistent zu haltenTools von Drittanbietern und dort Es gibt weitere Nutzungseinschränkungen. 3 Sterne. M-S1-S2 Optionen? Dieser Tisch hat 24 Stunden am Tag Geschäftsverkehr und akzeptiert keine geschäftliche Nichtverfügbarkeitszeit von mehr als 4 StundenSchließlich haben wir uns für die vom DBA bevorzugte (xin ku) Methode entschieden, nämlich die Durchführung einer M-S1-S2-Kaskadenreplikation.
Basierend auf der tatsächlichen Situationsbewertung beträgt die Nachfrage auf Geschäftsseite dieses Mal
OnlineDDL-Methode, wenn ALGORITHMUS =COPY, der Zeitraum wird während des endgültigen Umbenennungsvorgangs der Primär- und Sekundärtabellen (nicht lesbar und beschreibbar) DML (schreibgeschützt) blockiert, bis DDL abgeschlossen ist (die erforderliche Zeit ist ungewiss). Es wird empfohlen, zur Konvertierung eine Verbindung zur Slave-Bibliothek im Gh-ost-Modus herzustellen. Dieser Modus hat die geringsten Auswirkungen auf die Hauptbibliothek und die Flusskontrolle kann über Parameter eingestellt werden. Die fatale Schwäche dieses Tools besteht darin, dass die Änderung zu lange dauert. Für eine Tabelle mit 400 Millionen Daten dauerte es in der Testumgebung 70 Stunden. Abschließend müssen wir noch einen Umschaltbefehl erteilen und die Zwischentabelle *_del manuell löschen. Der Vorteil dieser Lösung besteht darin, dass zur Gewährleistung der Datensicherheit eine Slave-Datenbank vorhanden ist. Wenn Sie also eine 1-Master-2-Slave-Architektur verwenden, ist dies eher zu empfehlen. Pt-osc und Gh-ost gehören beide zu Drittanbietern. Der Betrieb großer Tabellen durch Pt-osc und OnlineDDL hat einen gemeinsamen Nachteil: Die Kosten für ein Rollback bei einem Ausfall sind sehr hoch. Wenn es sich um eine niedrigere Version wie MySQL
4. Funktionsweise: Erstellen Sie eine neue S1-Slave-Bibliothek und erstellen Sie eine M-S1-S2-Kaskadenreplikation. Verwenden Sie OnlineDDL, um das Feld auf S2 zu erweitern (der Vorteil besteht darin, dass der Master von M-S1 ist nie betroffen)

Nachdem die Erweiterung abgeschlossen ist, warten Sie auf die verzögerte Synchronisierung von M-S1-S2 (verringern Sie den Datenunterschied zwischen S2 und M und führen Sie eine Datenüberprüfung durch)

Entfernen Sie S1 und richten Sie die ein Master-Slave-Beziehung von M-S2 (Lassen Sie S2 weiterhin die Daten von M synchronisieren)

Sichern Sie S2 und stellen Sie S1 wieder her, richten Sie die M-S2-S1-Kaskadenreplikation ein

Die Anwendung stoppt und wartet auf die Master-Slave-Daten um konsistent zu sein (der Vorteil besteht darin, dass die Synchronisationszeit des differenziellen Datenvolumens sehr kurz ist)

Am Ende wird S2 zur Master-Bibliothek und S1 zur Slave-Bibliothek (die Anwendung muss die Front-End-Verbindung ändern). Informationen)
  • Die Anwendung wird zur Regressionsüberprüfung durchgeführt
  • Der obige Inhalt scheint sehr kompliziert zu sein, handelt es sich jedoch im Wesentlichen um Sicherung und Wiederherstellung. Leser können dies als Alternative in Betracht ziehen. Teilen Sie die spezifischen Schritte mit?
  • 以下语句也可以查看:
    show table status from dbname like 'tablename'\G # Rows 的值不准,有时误差有2倍
    
    SELECT a.table_schema,a.table_name,concat(round(sum(DATA_LENGTH/1024/1024)+sum(INDEX_LENGTH/1024/1024),2) ,'MB')total_size,concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') AS data_size,concat(round(sum(INDEX_LENGTH/1024/1024),2),'MB') AS index_size FROM information_schema.TABLES a WHERE a.table_schema = 'dbname' AND a.table_name = 'tablename'; #看下此表的数据量

  • Zusätzliches Szenario: Test basierend auf der Festplatten-IO-Fähigkeit
  • Ändern Sie direkt in der Hauptbibliothek und es gibt keinen Datenverkehr:
  • Szenario 1, die Festplatte ist eine physische NVME-Maschine, 400 Millionen Daten dauert etwa 5 Stunden (Festplattenleistung 1 G/s).

    Szenario 2: Die Festplatte ist eine virtuelle Maschine mit einer mechanischen Festplatte. Diese Datenmenge benötigt etwa 40 Stunden (Festplattenleistung 100 M/s).

Das obige ist der detaillierte Inhalt vonSo erweitern Sie die Felder großer Tabellen unter MySQL-Kaskadenreplikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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