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

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

黄舟
黄舟Original
2017-03-18 14:39:541996Durchsuche

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:

    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.

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

    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
  1. Diagramm generieren

Import grafana_table_stats.json unter dem Projekt in das Grafana-Bedienfeld. Der Effekt ist wie folgt:
Detaillierte Erläuterung des Codes zum Sammeln von Tabelleninformationen während der Überwachung von MySQL (Bilder und Text)
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!