So fahren Sie MySQL sicher herunter

So fahren Sie MySQL sicher herunter

Beim Herunterfahren des MySQL-Servers können, abhängig von der Art des Herunterfahrens, unterschiedliche Probleme auftreten. Die folgenden Schritte können dazu beitragen, das Auftreten von Problemen zu reduzieren.

1. Beenden Sie das Kopieren

Unter bestimmten Umständen versucht der Slave-Knoten möglicherweise, von der falschen Position aus zu starten. Um dieses Risiko zu verringern, stoppen Sie zuerst den E/A-Thread, damit keine neuen Ereignisinformationen empfangen werden.

mysql> Slave-IO_Thread stoppen;

Nachdem der SQL-Thread alle Ereignisse angewendet hat, wird auch der SQL-Thread gestoppt.

mysql> Slave-Status anzeigen\G
mysql> Slave-SQL_Thread stoppen;

Auf diese Weise können sich der E/A-Thread und der SQL-Thread an einer konsistenten Position befinden, das Relay-Protokoll enthält nur ausgeführte Ereignisse und die Positionsinformationen im relay_log_info_repository sind auch die neuesten.

Stellen Sie bei Slaves mit aktivierter Multithread-Replikation sicher, dass die Lücken gefüllt sind, bevor Sie die Replikation beenden.

mysql> Slave stoppen;
mysql> starte Slave bis sql_after_mts_gaps; #Lücke im Relay-Protokoll anwenden
mysql> show slave status\G #Stellen Sie sicher, dass sql_thread vor dem Ausführen des Befehls gestoppt wurde.
mysql> Slave stoppen;

2. Commit, Rollback oder Kill von Transaktionen mit langer Laufzeit

In einer Minute kann viel passieren und beim Herunterfahren muss InnoDB nicht festgeschriebene Transaktionen zurücksetzen. Das Zurücksetzen von Transaktionen ist sehr kostspielig und kann lange dauern. Da jedes Zurücksetzen einer Transaktion zu einem Datenverlust führen kann, sind beim Schließen im Idealfall keine Transaktionen offen.

Wenn die Lese-/Schreibdatenbank geschlossen ist, sollten Schreibvorgänge im Voraus auf andere Knoten umgeleitet werden. Wenn Sie eine Datenbank herunterfahren müssen, die noch Transaktionen empfängt, gibt die folgende Abfrage Informationen zu Sitzungen aus, die länger als 60 Sekunden ausgeführt wurden. Entscheiden Sie auf Grundlage dieser Informationen über den nächsten Schritt:

mysql> SELECT trx_id, trx_started, (NOW() - trx_started) trx_duration_seconds, ID processlist_id, Benutzer, WENN (LEFT(HOST, (LOCATE(':', host) - 1)) = '', Host, LEFT(HOST, (LOCATE(':', host) - 1))) Host, Befehl, Zeit, REPLACE(SUBSTRING(info,1,25),'\n','') info_25 FROM information_schema.innodb_trx JOIN information_schema.processlist ON innodb_trx.trx_mysql_thread_id = processlist.id WHERE (NOW() - trx_started) > 60 ORDER BY trx_started;
+--------+---------------------+----------------------+----------------+------+-----------+-----------+----------+----------+---------------------------+
| trx_id | trx_started | trx_duration_seconds | processlist_id | Benutzer | Host | Befehl | Zeit | info_25 |
+--------+---------------------+----------------------+----------------+------+-----------+-----------+----------+------+---------------------------+
| 511239 | 22.04.2020 16:52:23 | 2754 | 3515 | dba | localhost | Ruhezustand | 1101 | NULL |
| 511240 | 22.04.2020 16:53:44 | 74 | 3553 | root | localhost | Abfrage | 38 | update t1 set name="test" |
+--------+---------------------+----------------------+----------------+------+-----------+-----------+----------+----------+---------------------------+
2 Zeilen im Satz (0,00 Sek.)

3. Prozessliste löschen

MySQL wird gleich die Verbindung trennen und herunterfahren. Wir können MySQL manuell helfen.

Verwenden Sie pt-kill, um aktive und ruhende Verbindungen anzuzeigen und zu beenden. Zu diesem Zeitpunkt sollten keine neuen Schreibverbindungen eingehen. Wir verarbeiten nur Leseverbindungen.

pt-kill --host="localhost" --victims="alle" --interval=10 --ignore-user="pmm|orchestrator" --busy-time=1 --idle-time=1 --print [--kill]

Hier können Sie gezielt Verbindungsaufbauten bestimmter Benutzer ausschließen.

4. Konfigurieren Sie innodb so, dass die maximale Flush-Rate erreicht wird

GLOBAL SETZEN innodb_fast_shutdown=0;
GLOBAL SETZEN innodb_max_dirty_pages_pct=0;
GLOBAL FESTLEGEN innodb_change_buffering='keine';

Das Deaktivieren von innodb_fast_shutdown kann dazu führen, dass der Herunterfahrvorgang mehrere Minuten oder sogar Stunden dauert, da auf die Bereinigung des Undo-Protokolls und die Zusammenführung des Änderungspuffers gewartet werden muss.

Um das Herunterfahren zu beschleunigen, setzen Sie innodb_max_dirty_pages_pct=0 und überwachen Sie die Ergebnisse der folgenden Abfrage. Der erwartete Wert ist 0, aber das ist nicht immer garantiert, wenn in MySQL Aktivität herrscht. Wenn das Ergebnis dann nicht weiter kleiner wird, können Sie mit dem nächsten Schritt fortfahren:

GLOBALEN STATUS WIE „%dirty%“ ANZEIGEN;

Wenn Sie die PMM-Überwachung verwenden, können Sie das Diagramm des „InnoDB-Änderungspuffers“ anzeigen.

5. Den Inhalt des Pufferpools ausgeben

GLOBAL festlegen innodb_buffer_pool_dump_pct=75;
GLOBAL festlegen innodb_buffer_pool_dump_now=ON;
mysql> STATUS ANZEIGEN WIE 'Innodb_buffer_pool_dump_status';
+---------------------------------+-------------------------------------------------+
| Variablenname | Wert |
+---------------------------------+-------------------------------------------------+
| Innodb_buffer_pool_dump_status | Dump des/der Pufferpool(s) abgeschlossen am 200429 14:04:47 |
+---------------------------------+--------------------------------------------------+
1 Zeile im Satz (0,01 Sek.)

Um den gedumpten Inhalt beim Start zu laden, überprüfen Sie die Konfiguration des Parameters innodb_buffer_pool_load_at_startup.

6. Pinselprotokoll

Protokolle spülen;

Jetzt können Sie MySQL herunterfahren.

Meistens führen wir einfach den Stoppbefehl aus und es ist normal, dass MySQL heruntergefahren und neu gestartet wird. Gelegentlich gibt es Probleme.

Oben finden Sie Einzelheiten zum sicheren Herunterfahren von MySQL. Weitere Informationen zum sicheren Herunterfahren von MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Es ist Jahresende, ist Ihr MySQL-Passwort sicher?
  • Schnelle und sichere Methode zum Umbenennen einer MySQL-Datenbank (3 Arten)
  • So beenden Sie den MySQL-Prozess ordnungsgemäß und sicher
  • Einige Vorschläge zur Gewährleistung der MySQL-Datensicherheit
  • So fahren Sie eine MySQL-Instanz sicher herunter
  • Details zur MySQL-Sicherheitsverwaltung

<<:  Native JS realisiert den besonderen Effekt der Verbreitung von Liebe durch Mausbewegungen

>>:  InnerHTML verstehen

Artikel empfehlen

IE6-Verzerrungsproblem

Frage: <input type="hidden" name=&qu...

So stellen Sie Docker-Containerdaten wieder her

Die Datenbankdaten der Projekttestumgebung sind v...

Verständnis von Haslaylout- und BFC-Parsing

1. haslayout und bfc sind IE-spezifische und Stand...

JavaScript zum Erreichen eines einfachen Tab-Leisten-Umschaltens

In diesem Artikel wird der spezifische Code für J...

JavaScript erklärt die Kapselung und Verwendung von Zeitlupenanimationen

Durchführung von Prozessanalysen (1) Wie rufe ich...

Zusammenfassung der Grundlagen der Vue-Komponenten

Komponentengrundlagen 1 Wiederverwendung von Komp...

Wie implementiert Vue die Kommunikation zwischen Komponenten?

Inhaltsverzeichnis 1. Kommunikation zwischen Vate...

Grundlegende Kenntnisse zum MySQL UNION-Operator

MySQL UNION-Operator Dieses Tutorial stellt die S...

Linux-Installation Redis-Implementierungsprozess und Fehlerlösung

Ich habe heute Redis installiert und es sind eini...

So installieren Sie Graphviz und beginnen mit dem Tutorial unter Windows

Herunterladen und installierenUmgebungsvariablen ...