Heim > Datenbank > MySQL-Tutorial > Hauptteil

Detaillierte Erläuterung des Codes zum Sammeln von Tabelleninformationen während der Überwachung von MySQL (Bilder und Text)

黄舟
Freigeben: 2017-03-18 14:39:54
Original
2052 Leute haben es durchsucht

1. Geschichte

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:

  1. Tabellendatengröße (DATA_LENGTH)

  2. Indexgröße (INDEX_LENGTH)

  3. Anzahl der Zeilen (ROWS)

  4. 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:)

2. Konzept

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'
Nach dem Login kopieren

Ü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.

3. Verwendung

  1. Umgebung
    Geschrieben in der Python 2.7-Umgebung, 2.6 und 3.x wurden nicht getestet.

Für den Betrieb sind MySQLdb und influxdbzwei Bibliotheken erforderlich:

$ sudo pip install mysql-python influxdb
Nach dem Login kopieren
  1. Konfiguration
    settings_dbs.pyKonfigurationsdatei


    • 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
    Nach dem Login kopieren

    Sehen Sie sich die großen Informationen an, ähnlich wie:
    Detaillierte Erläuterung des Codes zum Sammeln von Tabelleninformationen während der Überwachung von MySQL (Bilder und Text)

    1. 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
    Nach dem Login kopieren

      Tabellendatengröße und Anzahl der Zeilen

      Detaillierte Erläuterung des Codes zum Sammeln von Tabelleninformationen während der Überwachung von MySQL (Bilder und Text)
      Erhöhung der Anzahl der Zeilen pro Tag, Auto_Inkrement-Nutzung

      4. Mehr

      1. Bei Unterdatenbank und Tabelle kann die globale eindeutige ID nicht in der Tabelle autoIncrUsage berechnet werden

      2. Es ist tatsächlich sehr schwierig zu implementieren. Einfach, das Wichtigste ist, das Bewusstsein für das Sammeln dieser Informationen zu wecken

      3. 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!

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage