Heim >Datenbank >MySQL-Tutorial >MySQL-Optimierung – Detaillierte Erklärung zum sicheren Herunterfahren von MySQL-Instanzen

MySQL-Optimierung – Detaillierte Erklärung zum sicheren Herunterfahren von MySQL-Instanzen

黄舟
黄舟Original
2017-03-10 10:46:341083Durchsuche


Herunterfahrvorgang:

  • 1. Herunterfahren einleiten und SIGTERM-Signal senden

  • Ja Erstellen Sie bei Bedarf einen neuen Shutdown-Thread

Wenn das Herunterfahren vom Client initiiert wird, wird ein dedizierter Shutdown-Thread erstellt

Wenn dieser direkt empfangen wird Wenn das SIGTERM Wenn das Signal ausgeschaltet wird, ist ein Thread, der speziell für die Signalverarbeitung verantwortlich ist, für die Abschaltarbeiten verantwortlich, oder es wird ein neuer unabhängiger Thread erstellt, der sich um diese Angelegenheit kümmert

Wenn kein unabhängiger Abschaltthread erstellt werden kann (z Beispiel: Nicht genügend Speicher), MySQL Server gibt eine Warnmeldung ähnlich der folgenden aus:

Fehler: Thread zum Beenden des Servers kann nicht erstellt werden

  • 3 Reagiert nicht mehr auf neue Verbindungsanfragen

TCP/IP-Netzwerküberwachung schließen, Unix Socket und andere Kanäle schließen

  • Aktuelle Verbindungen nach und nach schließen und Transaktionen

Leere Verbindungen werden sofort beendet

Verbindungen, die derzeit Transaktionen und SQL-Aktivitäten haben, werden als beendet markiert und ihr Status wird regelmäßig überprüft, damit Sie können bei der nächsten Prüfung geschlossen werden. (Siehe KILL-Syntax)

Wenn derzeit eine aktive Transaktion vorhanden ist, wird die Transaktion zurückgesetzt. Wenn in der Transaktion auch Nicht-Transaktionstabellen geändert werden Daten können nicht zurückgesetzt werden und nur ein Teil der Änderungen kann abgeschlossen werden.

Wenn es sich im Master/Slave-Replikationsszenario um den Master handelt, ist die Verarbeitung des Replikationsthreads dieselbe wie die des normalen Threads ;

Wenn es sich um den Slave im Master/Slave-Replikationsszenario handelt, werden die E/A- und SQL-Threads nacheinander geschlossen. Wenn diese beiden Threads derzeit aktiv sind, werden sie ebenfalls als beendet markiert und dann geschlossen.

Auf dem Slave-Server darf der SQL-Thread den aktuellen SQL-Vorgang direkt stoppen (um Replikationsprobleme zu vermeiden) und dann den Thread schließen;

In MySQl 5.0.80 und früher Wenn der SQL-Thread gerade eine Transaktion ausführt, wird die Transaktion ab Version 81 zurückgesetzt. Ab Version 81 wird auf das Ende aller Vorgänge gewartet, es sei denn, der Benutzer initiiert einen KILL-Vorgang.

Wenn der SQL-Thread des Slaves zum Abbrechen gezwungen wird, wenn er Operationen an Nicht-Transaktionstabellen durchführt, kann es zu Inkonsistenzen in den Master- und Slave-Daten kommen

  • 5 Serverprozess wird heruntergefahren. Alle Threads, alle Speicher-Engines schließen.

Alle Tabellen-Caches aktualisieren, alle offenen Tabellen schließen B. MyISAM. Alle Vorgänge, die auf das Schreiben warten, werden geleert. InnoDB leert den Pufferpool auf die Festplatte (ab MySQL 5.0.5, wenn innodb_fast_shutdown nicht auf 2 gesetzt ist), zeichnet die aktuelle LSN im Tabellenbereich auf und schreibt dann Schließe alle internen Threads.

    6. MySQL Server-Prozess beendet
  • Über den KILL-Befehl

Ab 5.0 unterstützt KILL die Angabe von zwei CONNECTION | QUERY Optionale Optionen:

    KILL CONNECTION ist dasselbe wie das Original, stoppt das Rollback der Transaktion, schließt die Thread-Verbindung und gibt zugehörige Ressourcen frei
  • KILL QUERY stoppt nur den aktuell zur Ausführung durch den Thread übermittelten Vorgang und lässt alles andere unverändert
  • Nach dem Absenden des KILL-Vorgangs wird ein spezielles Kill-Flag gesetzt Faden. Normalerweise dauert es eine Weile, bis der Thread tatsächlich geschlossen wird, da das Kill-Flag-Bit nur unter bestimmten Umständen überprüft wird:

    1 Beim Ausführen einer SELECT-Abfrage, in einer ORDER BY oder GROUP BY Schleife: Nach jedem Lesen einiger Zeilendatensätze wird das Kill-Mark-Bit überprüft. Wenn festgestellt wird, dass es vorhanden ist, wird die Anweisung beendet.
  • 2. Jedes Mal wird das Kill-Markierungsbit aus der Originaltabelle überprüft. Wenn festgestellt wird, dass es vorhanden ist, wird die Anweisung beendet und die temporäre Tabelle gelöscht 3. Bei der Ausführung von UPDATE und DELETE wird jedes Mal, wenn einige Zeilendatensatzblöcke gelesen werden, das Kill-Flag-Bit überprüft. Wenn festgestellt wird, dass es vorhanden ist, wird die Anweisung beendet und die Transaktion ausgeführt zurückgesetzt werden. Wenn sich der Vorgang auf eine Nicht-Transaktionstabelle bezieht, werden die geänderten Daten nicht zurückgesetzt.
  • 4. Die Funktion GET_LOCK() gibt NULL zurück 🎜>
  • 5. Der INSERT DELAY-Thread fügt schnell neue Datensätze zum Speicher hinzu und beendet sich dann

  • 6 , wird es freigegeben und beendet.
  • 8. Wenn die MyISAM-Tabelle beim Ausführen von REPAIR TABLE oder OPTIMIZE TABLE getötet wird, führt dies dazu, dass die Tabelle beschädigt und nicht verfügbar ist und die Anleitung zur erneuten Reparatur verwendet wird.
  • Einige Vorschläge zum sicheren Herunterfahren von MySQL
  • Wenn Sie den mysqld-Dienstprozess sicher herunterfahren möchten, wird empfohlen, die folgenden Schritte auszuführen:

  • 0. Verwenden Sie ein Konto mit der höchsten Autorität wie SUPER und ALL, vorzugsweise über den Unix-Socket

  • 1 Legen Sie oben innodb_fast_shutdown = 1 fest, damit InnoDB schnell heruntergefahren werden kann (ohne vollständige Bereinigung, Pufferzusammenführung einfügen). Wenn die MySQL-Version aktualisiert oder heruntergestuft werden soll, legen Sie es nicht fest 🎜>2. Setzen Sie innodb_max_dirty_pages_pct = 0, damit InnoDB alle schmutzigen Seiten auf die Festplatte leert

  • 3. Setzen Sie max_connections und max_user_connections auf 1, was bedeutet, dass am Ende keine neuen Verbindungen außer Ihrer aktuellen Verbindung erstellt werden dürfen; >4 , alle inaktiven Threads schließen, d. h. die Thread-ID, deren Status „Sleep“ ist und deren Zeit größer als 1 ist; Insbesondere wenn Tabellensperrthreads vorhanden sind, z. B. SELECT mit großen Datensätzen oder umfangreiches UPDATE, muss besonders vorsichtig vorgegangen werden

  • 6 Zur Bestätigung ist der Wert der Länge der Verlaufsliste niedrig (im Allgemeinen weniger als 500), d sind gleich, das heißt, alle LSNs-Prüfpunkte wurden erstellt LOCAL bedeutet, dass dieser Vorgang BINLOG nicht aufzeichnet. ;

  • 8. Wenn es sich um einen SLAVE-Server handelt, schließen Sie am besten zuerst IO_THREAD und warten Sie, bis alle RELAY-LOGs aufgebraucht sind. und schließen Sie dann SQL_THREAD, um zu vermeiden, dass SQL_THREAD beendet wird, wenn Sie große Transaktionen ausführen. Wenn Sie das Herunterfahren erzwingen müssen, warten Sie am besten, bis die große Transaktion abgeschlossen ist

  • 9. Führen Sie abschließend das Herunterfahren von mysqladmin aus.

  • 10. Im Notfall können Sie innodb_fast_shutdown = 1 setzen und dann mysqladmin Shutdown direkt ausführen oder sogar direkt kill oder kill -9 auf der Betriebssystemebene aufrufen, um mysqld zu beenden Prozess (in einigen Transaktionen gehen möglicherweise verloren, wenn innodb_flush_log_at_trx_commit = 0), aber wenn der MySQLd-Prozess erneut gestartet wird, wird eine CRASH RECOVERY durchgeführt, die abgewogen werden muss.

  • Nachdem ich so viel gesagt habe, reicht es unter normalen Umständen aus, MySQLadmin herunterzufahren. Wenn eine Blockierung auftritt, lesen Sie den obigen Inhalt zur Analyse und Lösung.

Das obige ist der detaillierte Inhalt vonMySQL-Optimierung – Detaillierte Erklärung zum sicheren Herunterfahren von MySQL-Instanzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn