Vorwort In diesem Artikel wird der Vorgang zum Herunterfahren des mysqld-Prozesses analysiert und wie die MySQL-Instanz sicher und reibungslos heruntergefahren wird. Studenten, denen dieser Vorgang nicht ganz klar ist, können ihn zu Rate ziehen. Abschlussprozess 1. Herunterfahren einleiten und SIGTERM-Signal senden 2. Erstellen Sie bei Bedarf einen Shutdown-Thread Wenn das Herunterfahren vom Client initiiert wird, wird ein dedizierter Herunterfahr-Thread erstellt Wenn das SIGTERM-Signal zum Herunterfahren direkt empfangen wird, übernimmt der für die Signalverarbeitung zuständige Thread die Herunterfahrarbeiten, oder es wird hierfür ein neuer unabhängiger Thread erstellt. Wenn kein separater Shutdown-Thread erstellt werden kann (beispielsweise aufgrund von unzureichendem Arbeitsspeicher), gibt MySQL Server eine Warnmeldung ähnlich der folgenden aus: Fehler: Es kann kein Thread zum Beenden des Servers erstellt werden. 3. MySQL Server antwortet nicht mehr auf neue Verbindungsanfragen Schließen Sie die TCP/IP-Netzwerküberwachung, schließen Sie Unix Socket und andere Kanäle 4. Schließen Sie die aktuelle Verbindung und Transaktion schrittweise Inaktive Verbindungen werden sofort beendet; Verbindungen, die aktuell Transaktionen und SQL-Aktivitäten aufweisen, werden als beendet markiert und ihr Status wird regelmäßig überprüft, sodass sie bei der nächsten Überprüfung geschlossen werden können (siehe KILL-Syntax). Wenn eine aktive Transaktion vorhanden ist, wird die Transaktion zurückgesetzt. Wenn in der Transaktion nicht transaktionale Tabellen geändert werden, können die geänderten Daten nicht zurückgesetzt werden und möglicherweise nur ein Teil der Änderung 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 einen Slave in einem Master/Slave-Replikationsszenario handelt, werden die IO- 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. Wenn sich der SQL-Thread in MySQL 5.0.80 und früheren Versionen mitten in der Ausführung einer Transaktion befindet, wird die Transaktion zurückgesetzt. Ab 5.0.81 wird gewartet, bis alle Vorgänge abgeschlossen sind, sofern der Benutzer keinen KILL-Vorgang initiiert. Wenn der SQL-Thread des Slaves beim Ausführen von Vorgängen an einer nicht transaktionalen Tabelle zwangsweise beendet wird, kann dies zu inkonsistenten Daten zwischen Master und Slave führen. 5. Der MySQL-Serverprozess schließt alle Threads und alle Speicher-Engines. Aktualisieren Sie alle Tabellen-Caches und schließen Sie alle offenen Tabellen. Jede Speicher-Engine ist für ihre eigenen Shutdown-Operationen verantwortlich. Beispielsweise wird MyISAM alle Operationen, die darauf warten, geschrieben zu werden, leeren; InnoDB wird den Pufferpool auf die Festplatte leeren (ab MySQL 5.0.5, wenn innodb_fast_shutdown nicht auf 2 gesetzt ist), die aktuelle LSN im Tablespace aufzeichnen und dann alle internen Threads schließen. 6. MySQL Server-Prozess wird beendet Über den KILL-Befehl Ab 5.0 unterstützt KILL die Angabe von CONNECTION | QUERY mit zwei Optionen: KILL CONNECTION ist dasselbe wie das Original. Es stoppt die Rollback-Transaktion, schließt die Thread-Verbindung und gibt zugehörige Ressourcen frei. 1. Beim Ausführen einer SELECT-Abfrage in einer ORDER BY- oder GROUP BY-Schleife wird nach dem Lesen jedes Zeilenblocks das Kill-Flag überprüft. Wenn es gefunden wird, wird die Anweisung beendet. 2. Bei der Ausführung von ALTER TABLE wird das Kill-Flag nach dem Lesen einiger Zeilenblöcke aus der Originaltabelle überprüft. Wenn es gefunden wird, wird die Anweisung beendet und die temporäre Tabelle gelöscht. 3. Beim Ausführen von UPDATE und DELETE wird das Kill-Flag nach dem Lesen einiger Zeilendatensatzblöcke und dem Aktualisieren oder Löschen überprüft. Wenn festgestellt wird, dass es vorhanden ist, wird die Anweisung beendet und die Transaktion zurückgesetzt. Wenn der Vorgang auf einer nicht transaktionalen Tabelle ausgeführt wird, werden die geänderten Daten nicht zurückgesetzt. 4. Die Funktion GET_LOCK() gibt NULL zurück; 5. Der INSERT DELAY-Thread fügt dem Speicher schnell neue Datensätze hinzu und wird dann beendet. 6. Wenn der aktuelle Thread eine Sperre auf Tabellenebene hält, wird diese freigegeben und beendet. 7. Wenn der Schreibvorgangsaufruf des Threads auf die Freigabe des Speicherplatzes wartet, wird direkt der Fehler „Speicherplatz voll“ ausgegeben und dann die Operation beendet. 8. Wenn eine MyISAM-Tabelle während REPAIR TABLE oder OPTIMIZE TABLE zerstört wird, wird die Tabelle beschädigt und unbrauchbar. Diese Anleitung hilft Ihnen, die Tabelle wieder zu reparieren. Einige Vorschläge zum sicheren Herunterfahren von MySQL Um den mysqld-Dienstprozess sicher herunterzufahren, wird empfohlen, die folgenden Schritte auszuführen: 0. Verwenden Sie ein Konto mit den höchsten Berechtigungen wie SUPER, ALL usw., um eine Verbindung zu MySQL herzustellen. Am besten verwenden Sie einen Unix-Socket. 1. Setzen Sie in den Versionen 5.0 und höher innodb_fast_shutdown = 1, um ein schnelles Herunterfahren von InnoDB zu ermöglichen (ohne vollständige Bereinigung oder Zusammenführung des Insert-Buffer). Setzen Sie dies nicht, wenn Sie ein Upgrade oder Downgrade der MySQL-Version durchführen. 2. Setzen Sie innodb_max_dirty_pages_pct = 0, damit InnoDB alle schmutzigen Seiten auf die Festplatte schreibt; 3. Setzen Sie max_connections und max_user_connections auf 1, was bedeutet, dass außer der aktuellen Verbindung keine neuen Verbindungen erstellt werden dürfen. 4. Schließen Sie alle inaktiven Threads, d. h. Thread-IDs, deren Status „Ruhezustand“ ist und deren Zeit größer als 1 ist. 6. Führen Sie SHOW ENGINE INNODB STATUS aus, um zu bestätigen, dass der Wert für die Länge der Verlaufsliste niedrig ist (normalerweise weniger als 500), was bedeutet, dass nur wenige nicht gelöschte Transaktionen vorhanden sind. Bestätigen Sie außerdem, dass die Werte für Protokollsequenznummer, Protokoll gelöscht bis und Letzter Prüfpunkt bei gleich sind, was bedeutet, dass alle LSNs geprüft wurden. 7. Führen Sie dann die Operation FLUSH LOCKAL TABLES aus, um alle Tabellen-Caches zu aktualisieren und die geöffneten Tabellen zu schließen (die Funktion von LOCAL besteht darin, zu verhindern, dass die Operation in BINLOG aufgezeichnet wird). 8. Wenn es sich um einen SLAVE-Server handelt, schließen Sie am besten zuerst IO_THREAD, warten Sie, bis alle RELAY LOGs angewendet wurden, und schließen Sie dann SQL_THREAD, um zu vermeiden, dass SQL_THREAD bei der Ausführung einer großen Transaktion beendet wird. Warten Sie geduldig, bis alle angewendet wurden. Wenn Sie das Schließen erzwingen müssen, warten Sie am besten, bis die große Transaktion abgeschlossen ist, bevor Sie SQL_THREAD schließen. 9. Führen Sie abschließend mysqladmin shutdown aus. 10. Im Notfall können Sie innodb_fast_shutdown = 1 festlegen und dann direkt mysqladmin shutdown ausführen oder sogar direkt kill oder kill -9 auf Betriebssystemebene aufrufen, um den mysqld-Prozess zu beenden (einige Transaktionen können verloren gehen, wenn innodb_flush_log_at_trx_commit = 0 ist). Wenn der mysqld-Prozess jedoch erneut gestartet wird, wird CRASH RECOVERY ausgeführt, sodass Sie einen Kompromiss eingehen müssen. Nach all dem Gerede reicht es unter normalen Umständen aus, mysqladmin shutdown auszuführen. Wenn eine Blockierung auftritt, lesen Sie zur Analyse und Lösung den obigen Inhalt, haha:) Oben finden Sie Einzelheiten dazu, wie Sie den MySQL-Prozess elegant und sicher schließen können. Weitere Informationen zum Schließen des MySQL-Prozesses finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Einige Tipps zur Verwendung von Less in Vue-Projekten
>>: Detaillierte Konfiguration von Nginx, das sowohl Http als auch Https unterstützt
Inhaltsverzeichnis Einführung in FTP, FTPS und SF...
Grundlegende Syntax Die Verwendung von Text-Overf...
Inhaltsverzeichnis 1.Linux-Anmeldeschnittstelle 2...
Dieser Artikel ist MySQL-Datenbank Frage 1 Import...
CentOS 8 ist jetzt verfügbar! Die Versionen von C...
Ich bin kürzlich auf das Audiovisual Linux Projec...
Dieser Artikel stellt hauptsächlich vor, wie man ...
Als ich heute VMware verwendete, um eine neue vir...
SQL-Anweisung /* Einige Methoden zum Eliminieren ...
Während des Entwicklungs- und Debugging-Prozesses...
Laden Sie die neueste Version von MySQL für Ubunt...
Wenn der Milchglaseffekt gut gelingt, kann er die...
Inhaltsverzeichnis 1. DateTimePicker Datumsauswah...
Vielen Leuten wird das Kompilieren erklärt, sobal...
Inhaltsverzeichnis Aktualisieren Sie das Bild von...