Detaillierte Erläuterung der Überwachung von Spaltenüberläufen ohne Primärschlüssel in MySQL-Tabellen

Detaillierte Erläuterung der Überwachung von Spaltenüberläufen ohne Primärschlüssel in MySQL-Tabellen

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:
  • Ausführliche Diskussion über die automatische Inkrementierung von Primärschlüsseln in MySQL
  • Der Unterschied sowie die Vor- und Nachteile des MySQL-Primärschlüssels UUID und des automatisch inkrementierten Primärschlüssels
  • MySQL-Primärschlüssel-Benennungsstrategie im Zusammenhang
  • Was tun, wenn der Auto-Increment-Primärschlüssel in MySQL aufgebraucht ist?
  • Lösung für das Ausgehen der Auto-Increment-ID (Primärschlüssel) von MySQL
  • Detaillierte Analyse, warum MySQL die Verwendung von UUID oder Snowflake-ID als Primärschlüssel nicht empfiehlt
  • Verwenden Sie Prometheus, um den verbleibenden verfügbaren Prozentsatz der MySQL-Autoinkrement-Primärschlüssel zu zählen
  • Mysql SQL-Anweisungsvorgang zum Hinzufügen oder Ändern des Primärschlüssels

<<:  Implementierung der K8S-Bereitstellung eines Docker-Containers

>>:  Methode zum dynamischen Laden von Geojson basierend auf Vue+Openlayer

Artikel empfehlen

Tutorial-Diagramm zur Installation von Zabbix2.4 unter Centos6.5

Die feste IP-Adresse des Centos-DVD1-Versionssyst...

Aufzeichnungen zur Verwendung von SSH-Befehlen unter Windows 8

1. Öffnen Sie die virtuelle Maschine und das Git-...

Implementierung eines Karussells mit nativem JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

XHTML-Tutorial: Der Unterschied zwischen Transitional und Strict

Tatsächlich ist XHTML 1.0 in zwei Typen unterteil...

Detaillierte Erklärung zur Erstellung von Schießspielen mit CocosCreator

Inhaltsverzeichnis Szeneneinstellung Spielressour...

Analyse der HTTP-Dienstschritte auf einer virtuellen VMware-Maschine

1. Verwenden Sie xshell, um eine Verbindung mit d...

JavaScript implementiert das mobile Puzzlespiel mit neun Rastern

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

Implementierungsbeispiel für die Bereitstellung von Docker rocketmq

Inhaltsverzeichnis Vorbereitung Bereitstellungspr...