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
Detaillierte Erläuterung des MySql-Beispiels für ...
Inhaltsverzeichnis Was ist JSI Was ist anders an ...
In diesem Artikel werden hauptsächlich mehrere Pl...
Zum ersten Mal schreiben. Gestatten Sie mir, mich...
Inhaltsverzeichnis Was sind Spread- und Rest-Oper...
In diesem Artikelbeispiel wird der spezifische Co...
Die Tabellenüberschrift kann über oder unter der ...
Schritte zur Linux-Installation von JDK1.8 1. Übe...
Integritätsbeschränkungen Integritätsbedingungen ...
Inhaltsverzeichnis Vorwort 1. Installieren Sie sc...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Nachfrage 2. Wirkung 3. All...
Nginx unterstützt weder verschachtelte if-Anweisu...
Als ich vor ein paar Tagen ein Programm schrieb, w...
Ich werde nicht erklären, was CUDA ist, sondern d...