Heute bin ich wieder in die Falle getappt. Ich bin schon einmal auf einen MySQL-Primärschlüsselüberlauf gestoßen und habe ihn über Prometheus überwacht. Weitere Einzelheiten finden Sie in dieser Überprüfung des MySQL-Primärschlüsselüberlaufs Die Fallstricke, auf die man dieses Mal stieß, waren versteckter. Eine Spalte vom Typ int signed in einer Protokolltabelle ist voll. Die schnelle Lösung besteht natürlich darin, als Notfallmaßnahme auf eine neue Tabelle umzusteigen und dann einige historische Daten von der alten Tabelle auf die Hot Table zu verschieben. Es ist Zeit, den Fehler zu beheben. Nachdem Sie das Problem behoben haben, schreiben Sie schnell ein Skript, um alle anderen Produktionstabellen zu überprüfen. Das Folgende ist ein Erkennungsskript, das ich vorübergehend verwende. Es ist noch nicht perfekt, also werde ich es so verwenden, wie es ist. Aufteilen in 2 Dateien (1 SQL-Datei, 1 Shell-Skript) Der Inhalt von check.sql ist wie folgt: WÄHLEN cast( pow(2, case Datentyp wenn 'tinyint' dann 7 wenn 'smallint' dann 15 wenn 'mediumint' dann 23 wenn 'int' dann 31 wenn 'bigint' dann 63 Ende + (Spaltentyp wie '% unsigned'))-1 als Dezimalzahl (30,0)) als max_int, ' - ', concat ('(', concat('auswählen ','max(',COLUMN_NAME,')',' aus ',TABLE_SCHEMA,'.',TABLE_NAME),')') aus information_schema.SPALTEN Wo TABLE_SCHEMA NICHT IN ('Informationsschema', 'Sys', 'Test', 'MySQL', 'Leistungsschema') UND DATENTYP IN ('int'); Führen Sie es direkt in der Datenbank aus. Der Effekt ist ungefähr wie folgt: Der Inhalt von check.sh ist wie folgt: #!/bin/bash # Überwachen Sie den int-Typ. Wenn der verfügbare Speicherplatz weniger als 5 Millionen beträgt, erinnern Sie daran, den DDL-Vorgang durchzuführen. # Setzen Sie die max_execution_time der Sitzungsebene auf 2 Sekunden, um zu verhindern, dass große Spalten ohne Index die Datenbank verlangsamen. Dabei können jedoch einige Spalten fehlen, seien Sie also vorsichtig. # Hinweis: Ich habe den Bigint-Typ hier nicht geprüft. Ändern Sie bei Bedarf DATA_TYPE in check.sql, wo die Bedingung zum Hinzufügen der Bigint-Prüfquelle /etc/profile besteht setze -u mkdir $(Datum +%F) -pv # Schritt 1: Erkennung für Host in {'192.168.1.100','192.168.1.110','192.168.1.120','192.168.1.130'}; mysql -udts -pdts -h${host} -BN < check.sql 2>/dev/null > sql.log Warten echo "Beschreibung: | Maximal zulässiger Wert für die aktuelle Spalte | SQL zur Überprüfung " >> $(date +%F)/$host.log während Zeile lesen; machen ret=$(mysql -udts -pdts -h${host} -BNe "setze Sitzungs-Max.-Ausführungszeit=2000; wähle $line" 2>/dev/null) echo ${ret} wenn [[ "${ret}" == "NULL" ]]; dann weitermachen fi wenn [ ${ret} -lt 5000000 ] ; dann echo "$line verbleibender Speicherplatz ${ret}, der verfügbare Wasserstand in der Tabelle beträgt weniger als 5 Millionen. Es wird empfohlen, DDL auf den Typ Bigint zu ändern" >> $(date +%F)/$host.log fi fertig < ./sql.log Erledigt # Schritt 2: Verpacken Sie die Inspektionsinhalte und versenden Sie sie per E-Mail (ggf. müssen Sie dies entsprechend Ihrer Produktionssituation anpassen) tar czf $(Datum +%F).tar.gz $(Datum +%F) sendemail -s 192.168.1.200 -f [email protected] -t [email protected] -a $(date +%F).tar.gz -u "$(date +%F) int Wasserstandsprüfprotokoll" -o message-content-type=html -o message-charset=utf8 -m "Einzelheiten finden Sie im Anhang" # Schritt 3: Bereinigen Sie die täglich generierten Verzeichnisse mit Datumsnamen und Tar.gz-Dateien. Ich werde die Befehle hier nicht veröffentlichen. Fügen Sie dann jeden Tag um 10 Uhr einen Cronjob hinzu. Abschließend sei bemerkt, dass der Inhalt der täglich empfangenen E-Mails ungefähr wie folgt aussieht: Dies ist das Ende dieses Artikels zur Überwachung des Überlaufs von Nicht-Primärschlüsselspalten in MySQL-Tabellen. Weitere Informationen zu Überläufen von Nicht-Primärschlüsselspalten in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Implementierung der K8S-Bereitstellung eines Docker-Containers
>>: Methode zum dynamischen Laden von Geojson basierend auf Vue+Openlayer
Die feste IP-Adresse des Centos-DVD1-Versionssyst...
1. Öffnen Sie die virtuelle Maschine und das Git-...
Installieren von MySQL 5.7 aus TAR.GZ auf Mac OS ...
Ich habe kürzlich an mehreren virtuellen Maschine...
In diesem Artikel finden Sie den spezifischen Cod...
Tatsächlich ist XHTML 1.0 in zwei Typen unterteil...
Inhaltsverzeichnis Szeneneinstellung Spielressour...
In MySQL kann das Problem der Groß- und Kleinschr...
1. Verwenden Sie xshell, um eine Verbindung mit d...
Durch die Verwendung von iFrames können problemlo...
Inhaltsverzeichnis Wirkungsdemonstration:Hauptimp...
In diesem Artikel wird der spezifische Code für J...
1: Anweisungsreihenfolge der Gruppierungsfunktion...
Inhaltsverzeichnis Vorbereitung Bereitstellungspr...
Code kopieren Der Code lautet wie folgt: <HTML...