Vielleicht werden Sie oft nach dem monatlichen Datenvolumenwachstum einer bestimmten Tabelle in der Bibliothek im vergangenen Jahr gefragt. Natürlich wäre es einfacher, wenn Sie die Tabellen einzeln nach Monaten aufteilen würden show table status
Wenn es nur eine große Tabelle gibt, müssen Sie wahrscheinlich in der einsamen Nacht, in der sich alle ausruhen, SQL-Statistiken ausführen, weil Sie das können Erhalten Sie nur die aktuellen Tabelleninformationen, historische Informationen können nicht zurückverfolgt werden.
Darüber hinaus müssen Sie als DBA auch das Wachstum des Datenbankspeicherplatzes abschätzen, um die Kapazität zu planen. Zu den Tabelleninformationen, über die wir sprechen, gehören hauptsächlich:
Tabellendatengröße (DATA_LENGTH)
Indexgröße (INDEX_LENGTH)
Anzahl der Zeilen (ROWS)
Aktueller Auto-Inkrementwert (AUTO_INCREMENT, falls vorhanden)
Ich habe Ich habe noch nicht gesehen, welcheMySQL solche Indikatoren im Überwachungstool bereitstellt. Diese Informationen müssen nicht zu häufig erfasst werden, und das Ergebnis ist nur eine Schätzung und möglicherweise nicht genau. Daher dient dies der Überwachung (Erfassung) der Tabelle aus einer globalen und langfristigen Perspektive.
Das Sammlungstool, das ich in diesem Artikel vorgestellt habe, basiert auf dem vorhandenen Überwachungssystem in der Gruppe:
InfluxDB
: Zeitreihendatenbank, Speicherüberwachungsdaten
Grafana
: Datenanzeigefeld
Telegraf
: Agent, der Informationen sammelt
Schauen Sie sich das neueste MySQL-Plug-in von telegraf an Ich war zunächst sehr zufrieden: Es unterstützt die Sammlung von Tabellenschemastatistiken und automatisch inkrementierenden Infoschemaspalten. Ich habe es ausprobiert und es gibt Daten, aber wie bereits erwähnt, ist alles andere eine Schätzung, die Telegraf-Erfassungshäufigkeit ist zu hoch, was keinen Sinn ergibt. Das IntervalSlow
Option ist im Code behoben. Die einzige Möglichkeit besteht darin, die Häufigkeit der globalen Statusüberwachung zu verlangsamen. Es kann jedoch implementiert werden, indem es von anderen Überwachungsindikatoren in zwei Konfigurationsdateien getrennt und jeweils die Erfassungsintervalle definiert wird.
Schließlich habe ich vor, mit Python selbst eines zu erstellen und es an influxdb zu melden:)
Den vollständigen Code finden Sie unter die GitHub-Projektadresse: DBschema_gather
Die Implementierung ist ebenfalls sehr einfach, fragen Sie einfach die Tabellen information_schema
und COLUMNS
der TABLES
-Bibliothek ab:
SELECT IFNULL(@@hostname, @@server_id) SERVER_NAME, %s as HOST, t.TABLE_SCHEMA, t.TABLE_NAME, t.TABLE_ROWS, t.DATA_LENGTH, t.INDEX_LENGTH, t.AUTO_INCREMENT, c.COLUMN_NAME, c.DATA_TYPE, LOCATE('unsigned', c.COLUMN_TYPE) COL_UNSIGNED # CONCAT(c.DATA_TYPE, IF(LOCATE('unsigned', c.COLUMN_TYPE)=0, '', '_unsigned')) FROM information_schema.`TABLES` t LEFT JOIN information_schema.`COLUMNS` c ON t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME AND c.EXTRA = 'auto_increment' WHERE t.TABLE_SCHEMA NOT IN ( 'mysql', 'information_schema', 'performance_schema', 'sys' ) AND t.TABLE_TYPE = 'BASE TABLE'
Überauto_increment
achten wir nicht nur darauf, wo das aktuelle Wachstum ist, sondern auch darauf, wie viel freier Speicherplatz im Vergleich zum Maximalwert von int / bigint
steht. Daher wurde die Spalte autoIncrUsage
berechnet, um das aktuell verwendete Verhältnis zu speichern.
Verwenden Sie dann den Python-Client von InfluxDB, um stapelweise in influxdb zu speichern. Ohne InfluxDB wird das Ergebnis json ausgedruckt – dies ist ein Format, das häufig von Überwachungstools wie Zabbix und Open-Falcon unterstützt wird.
Der letzte Schritt besteht darin, mit Grafana Diagramme aus der Influxdb-Datenquelle zu zeichnen.
Umgebung
Geschrieben in der Python 2.7-Umgebung, 2.6 und 3.x wurden nicht getestet.
Für den Betrieb sind MySQLdb
und influxdb
zwei Bibliotheken erforderlich:
$ sudo pip install mysql-python influxdb
Konfigurationsettings_dbs.py
Konfigurationsdatei
DBLIST_INFO
: In der Liste werden die zu sammelnden MySQL-Instanztabelleninformationen und die Tupel gespeichert die Verbindungen. Adresse, Port, Benutzername, Passwort
Benutzer benötigen die Berechtigung, die Tabelle auszuwählen, sonst können sie die entsprechenden Informationen nicht sehen.
InfluxDB_INFO
: Influxdb-Verbindungsinformationen, bitte erstellen Sie den Datenbanknamen im Voraus mysql_info
und setzen Sie ihn auf None
. Das Ausgabeergebnis kann JSON sein.
Erstellen Sie Datenbank- und Speicherstrategie auf influxdb
Speicherung für 2 Jahre, 1 Replikatsatz: (Nach Bedarf anpassen)
CREATE DATABASE "mysql_info" CREATE RETENTION POLICY "mysql_info_schema" ON "mysql_info" DURATION 730d REPLICATION 1 DEFAULT
Sehen Sie sich die großen Informationen an, ähnlich wie:
Crontab ausführen
Es kann separat auf dem für die Überwachung verwendeten Server platziert werden, es wird jedoch empfohlen, es auf dem Host auszuführen, auf dem sich die MySQL-Instanz in der Produktionsumgebung befindet aus Sicherheitsgründen.
Allgemeine Bibliotheken führen die Datenmigration nachts durch. Sie können mysql_schema_info.py
vor und nach der Migration ausführen, um sie zu sammeln. Nicht allzu oft empfohlen.
40 23,5,12,18 * * * /opt/DBschema_info/mysql_schema_info.py >> /tmp/collect_DBschema_info.log 2>&1
Erhöhung der Anzahl der Zeilen pro Tag, Auto_Inkrement-Nutzung
Bei Unterdatenbank und Tabelle kann die globale eindeutige ID nicht in der Tabelle autoIncrUsage berechnet werden
Es ist tatsächlich sehr schwierig zu implementieren. Einfach, das Wichtigste ist, das Bewusstsein für das Sammeln dieser Informationen zu wecken
Sie können das Graphite-Ausgabeformat hinzufügen
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Codes zum Sammeln von Tabelleninformationen während der Überwachung von MySQL (Bilder und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!