Heim >Datenbank >MySQL-Tutorial >MySQL-Optimierung – Detaillierte Erklärung zum sicheren Herunterfahren von MySQL-Instanzen
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.
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!