MySQL-Inspektionsskript (unbedingt lesen)

MySQL-Inspektionsskript (unbedingt lesen)

Wie unten dargestellt:

#!/usr/bin/env python3.5

psutil importieren
mysql.connector importieren
Argparse importieren
JSON importieren
Datum/Uhrzeit importieren

def get_cpu_info(ausführlich):
  cpu_info={}
  wenn ausführlich >0:
    drucken("[cpu] Beginnen Sie mit dem Sammeln der CPU-Informationen ...")
  Daten = psutil.cpu_times_percent(3)
  cpu_info['Benutzer'] = Daten[0]
  cpu_info['system']=Daten[2]
  cpu_info['Leerlauf']=Daten[3]
  cpu_info['iowait']=Daten[4]
  cpu_info['hardirq']=Daten[5]
  cpu_info['softirq']=Daten[6]
  cpu_info['cpu_cores'] = psutil.cpu_count()
  wenn ausführlich >0:
    drucken("{0}".format(json.dumps(cpu_info,ensure_ascii=False,indent=4)))
    drucken("[cpu] Sammlung abgeschlossen ...")
  CPU-Informationen zurückgeben

def get_mem_info(ausführlich):
  mem_info={}
  wenn ausführlich >0:
    drucken("[mem] Beginne mit dem Sammeln der Speicherinformationen ...")
  Daten = psutil.virtual_memory()
  mem_info['gesamt'] = Daten[0]/1024/1024/1024
  mem_info['avariable']=Daten[1]/1024/1024/1024
  wenn ausführlich>0:
    drucken("{0}".format(json.dumps(mem_info,ensure_ascii=False,indent=4)))
    drucken("[mem] Sammlung abgeschlossen ...")
  Speicherinformationen zurückgeben

def get_disk_info(ausführlich):
  disk_info={}
  wenn ausführlich >0:
    drucken("[disk] starte das Sammeln von Disk-Informationen ...")
  partitionen = psutil.disk_partitions()
  partitions=[(partition[1],partition[2])für Partition in Partitionen, wenn Partition[2]!='iso9660']
  disk_info={}
  für die Aufteilung in Partitionen:
    disk_info[partition[0]]={}
    disk_info[partition[0]]['fstype']=partition[1]
  für mount_point in disk_info.keys():
    Daten = psutil.disk_usage(Einhängepunkt)
    disk_info[mount_point]['total']=Daten[0]/1024/1024/1024
    disk_info[mount_point]['used_percent']=Daten[3]
  wenn ausführlich >0:
    drucken("{0}".format(json.dumps(disk_info,ensure_ascii=False,indent=4)))
    drucken("[disk] Sammlung abgeschlossen ....")
  Disk_Info zurückgeben

def get_mysql_info(cnx_args, status_list):
  Konfiguration={
    'Benutzer':cnx_args.user,
    'Passwort':cnx_args.password,
    'Gastgeber':cnx_args.host,
    'Port':cnx_args.port}
  cnx=Keine
  Cursor=Keine
  mysql_info={}
  versuchen:
    cnx = mysql.connector.connect(**Konfiguration)
    Cursor = cnx.cursor(vorbereitet=True)
    für Index im Bereich (Länge (Statusliste)):
      status_list[index].get_status(cursor)
      status=Statusliste[Index]
      mysql_info[status.name]=status.wert
    mysql_info['Port'] = Konfiguration['Port']
  außer mysql.connector.Error als err:
    drucken(fehler)
  Endlich:
    wenn Cursor != Keine:
      cursor.schließen()
    wenn cnx != Keine:
      cnx.schließen()
  mysql_info zurückgeben

Klasse Status (Objekt):
  def __init__(selbst, Name):
    selbst.name = Name
    self._value=Keine


  def get_status(selbst, Cursor):
    stmt="globalen Status wie '{0}' anzeigen;".format(self.name)
    cursor.execute(stmt)
    Wert = Cursor.fetchone()[1].decode('utf8')
    self._Wert = int(Wert)


  @Eigentum
  def-Wert (selbst):
    wenn self._value==Keine:
      Ausnahme auslösen("Wert kann nicht abgerufen werden, bevor die Funktion get_status ausgeführt wird")
    anders:
      returniere self._value

IntStatus=Status


Klasse DiskResource (Objekt):
  def __init__(selbst, Einhängepunkt, Status):
    self.mount_point=Einhängepunkt
    selbst.status = Status

  def __str__(selbst):
    Ergebnis=''' <div class="stage-list">
          <div class="stage-title"><span>{0}</span></div>
          <div Klasse="Detail">
            <p Klasse="Detailliste">
              <span class="detail-title">Formate unterscheiden</span>
              <span class="detail-describe">{1}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Gesamtgröße des Speicherplatzes</span>
              {2:8.2f}G
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Freier Speicherplatz (%)</span>
              {3:8.2f}
            </p>
            <p Klasse="Detailliste">
              
            </p>
          </div>
        </div>\n'''.format(self.mount_point,self.status['fstype'],self.status['total'],self.status['used_percent'])
    Ergebnis zurückgeben

Klasse diskResources(Objekt):
  def __init__(selbst, status):
    selbst.disketten = []
    für mount_point in status.keys():
      self.disks.append(diskResource(Einhängepunkt,status[Einhängepunkt]))

  def __str__(selbst):
    Ergebnis=''' <div class="list-item">
      <div Klasse="Kategorie">
        <span>Datenträger</span>
      </div>
      <div Klasse="zweite Stufe">\n'''
    für Index im Bereich (Länge (self.disks)):
      Ergebnis = Ergebnis + self.disks[index].__str__()
    Ergebnis=Ergebnis+''' </div>
    </div>\n'''
    Ergebnis zurückgeben

Klasse cpuResources (Objekt):
  def __init__(selbst, status):
    selbst.status = Status
  def __str__(selbst):
    Ergebnis=''' <div class="list-item">
      <div Klasse="Kategorie">
        <span>Zentrale Prozessoreinheit</span>
      </div>
      <div Klasse="zweite Stufe">
        <div Klasse="Bühnenliste">
          <div class="stage-title"><span>global</span></div>
          <div Klasse="Detail">
            <p Klasse="Detailliste">
              <span class="detail-title">Benutzerspeicherplatznutzung (%)</span>
              <span class="detail-describe">{0}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Kernel-Speicherplatznutzung (%)</span>
              <span class="detail-describe">{1}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Leerlauf (%)</span>
              <span class="detail-describe">{2}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Harte Unterbrechung (%)</span>
              <span class="detail-describe">{3}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Weiche Unterbrechung (%)</span>
              <span class="detail-describe">{4}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">io-Wartezeit (%)</span>
              {5}
            </p>
            <p Klasse="Detailliste">

            </p>
          </div>
        </div>
      </div>
    </div>\n'''.format(self.status['Benutzer'],self.status['System'],self.status['Leerlauf'],self.status['hardirq'],self.status['softirq'],self.status['iowait'])
    Ergebnis zurückgeben

Klasse memResources (Objekt):
  def __init__(selbst, status):
    selbst.status = Status

  def __str__(selbst):
    Ergebnis=''' <div class="list-item">
      <div Klasse="Kategorie">
        <span>Speicher</span>
      </div>
      <div Klasse="zweite Stufe">
        <div Klasse="Bühnenliste">
          <div class="stage-title"><span>global</span></div>
          <div Klasse="Detail">
            <p Klasse="Detailliste">
              <span class="detail-title">Gesamtgröße</span>
              {0:8.2f}G
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">Freie Größe</span>
              {1:8.2f}G
            </p>
            
            <p Klasse="Detailliste">
              
            </p>
          </div>
        </div>
      </div>
    </div>'''.format(self.status['gesamt'],self.status['avariable'])
    Ergebnis zurückgeben


Klasse mysqlResources(Objekt):
  def __init__(selbst, status):
    selbst.status = Status
  def __str__(selbst):
    Ergebnis=''' <div class="list-item">
      <div Klasse="Kategorie">
        <span>MYSQL</span>
      </div>
      <div Klasse="zweite Stufe">
        <div Klasse="Bühnenliste">
          <div class="stage-title"><span>{0}</span></div>
          <div Klasse="Detail">
            <p Klasse="Detailliste">
              innodb_log_wait
              <span class="detail-describe">{1}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">binlog_cache_use</span>
              <span class="detail-describe">{2}</span>
            </p>
            <p Klasse="Detailliste">
              <span class="detail-title">temp_disk_table erstellen</span>
              <span class="detail-describe">{3}</span>
            </p>
                        <p Klasse="Detailliste">
                            <span class="detail-title">Langsame Abfragen</span>
                            <span class="detail-describe">{4}</span>
                        </p>

            <p Klasse="Detailliste">
              
            </p>
          </div>
        </div>
      </div>
    </div>'''.format(self.status['Port'],self.status['Innodb_log_waits'],self.status['Binlog_cache_use'],
             self.status['Erstellte temporäre Festplattentabellen'], self.status['Langsame Abfragen'])

    Ergebnis zurückgeben

Klasse hostResources (Objekt):
  def __init__(self,cpu_info,mem_info,disk_info,mysql_info,report_title='MySQL-Prüfbericht'):
    self.cpu = CPU-Ressourcen(CPU-Info)
    self.mem = memResources(mem_info)
    self.disk = Datenträgerressourcen(Datenträgerinfo)
    self.mysql = mysqlResources(mysql_info)
    self.report_title = Berichtstitel
  def __str__(selbst):
    Ergebnis='''<!DOCTYPE html>
<html lang="de">
<Kopf>
  <meta charset="UTF-8">
  <title>Inspektionsbericht</title>
<Stil>
*{
  Rand: 0;
  Polsterung: 0;
}
  .Inhalt{
    Breite: 1000px;
    Höhe: automatisch;
    Rand: 30px automatisch;
    Rahmen unten: 1px durchgezogen #b2b2b2;
  }
  .Listenelement{
    Rand: 1px durchgezogen #b2b2b2;
    Rahmen unten: keiner;
    Übergang: alle .35er;
    Überlauf: versteckt;
    Anzeige: Flex;
  }
  .list-item:empty{
    Anzeige: keine;
  }
  .top-Titel{
    Zeilenhöhe: 32px;
    Schriftgröße: 16px;
    Farbe: #333;
    Texteinzug: 10px;
    Schriftstärke: 600;
  }
  .Kategorie{
    Breite: 97px;
    Höhe: automatisch;
    Rahmen rechts: 1px durchgezogen #b2b2b2;
    schweben: links;
    Textausrichtung: zentriert;
    Position: relativ;
  }
  .stage-title>span,
  .Kategorie>Spanne{
    Anzeige: Block;
    Höhe: 20px;
    Breite: 100 %;
    Textausrichtung: zentriert;
    Zeilenhöhe: 20px;
    Position: absolut;
    oben: 50 %;
    Rand oben: -10px; links: 0;
  }
  .zweite Stufe{
    Breite: 900px;
    schweben: links;
  }
  .Bühnenliste{
    Rahmen unten: 1px durchgezogen #b2b2b2;
    Anzeige: Flex;
  }
  .stage-list:letztes-Kind{
    Rahmen unten: 0;
  }
  .Bühnentitel{
    Breite: 99px;
    Rahmen rechts: 1px durchgezogen #b2b2b2;
    Position: relativ;
  }
  .Detail{
    biegen: 1;
  }
  .detail-Liste{
    Rahmen unten: 1px durchgezogen #b2b2b2;
    Höhe: 40px;
    Anzeige: Flex;
    Übergang: alle .35er;
  }
  .detail-titel{
    Polsterung: 10px;
    Höhe: 20px;
    Zeilenhöhe: 20px;
    Rahmen rechts: 1px durchgezogen #b2b2b2;
    Breite: 200px;
  }
  .detail-beschreiben{
    biegen: 1;
    Polsterung: 10px; Zeilenhöhe: 20px;
  }
  .detail-list:letztes-Kind{
    Rahmen unten: 0;
  }
  .list-item:hover{
    Hintergrundfarbe: #eee;
  }
  .detail-list:hover{
    Hintergrundfarbe: #d1d1d1;
  }
</Stil>
</Kopf>
<Text>
  <div Klasse="Inhalt">
        <div Klasse="Listenelement">
            <p class="top-title">Berichtstitel</p>
        </div>\n'''

    Ergebnis = Ergebnis.Ersetzen('Berichtstitel', selbst.Berichtstitel)
    Ergebnis = Ergebnis + self.cpu.__str__()
    Ergebnis = Ergebnis + self.mem.__str__()
    Ergebnis = Ergebnis + self.disk.__str__()
    Ergebnis = Ergebnis + self.mysql.__str__()
    Ergebnis=Ergebnis+''' </div>
</body>
</html>'''
    Ergebnis zurückgeben


wenn __name__=="__main__":
  Parser = argparse.ArgumentParser()
  parser.add_argument('--verbose',Typ=int,Standard=1,Hilfe='ausführlich für Ausgabe')
  parser.add_argument('--user',default='chkuser',help='Benutzername für Verbindung mit MySQL')
  parser.add_argument('--password',default='123456',help='Benutzerkennwort für Verbindung mit MySQL')
  parser.add_argument('--host',Standard='127.0.0.1',Hilfe='MySQL-Host-IP')
  parser.add_argument('--port',Standard=3306,Typ=int,Hilfe='MySQL-Port')
  parser.add_argument('--int-status',Standard=('Com_select,Com_insert,Com_update,Com_delete,Innodb_log_waits,'
                        „Binlog_cache_disk_use,Binlog_cache_use,Erstellte temporäre Festplattentabellen,“
                        „Langsame Abfragen“)
            ,help='mysql status, sein Wert ist wie int')
  parser.add_argument('--report-title',default='MySQL-Prüfbericht',help='Berichtstitel')
  parser.add_argument('--output-dir',default='/tmp/',help='Standardausgabepfad für Berichtsdateien')
  args = parser.parse_args()
  cpu_info = get_cpu_info(args.verbose)
  mem_info = get_mem_info(args.verbose)
  disk_info = get_disk_info(args.verbose)
  status_list=[ IntStatus(name=item) für Element in args.int_status.split(',')]
  mysql_info = get_mysql_info(Argumente, Statusliste)
  #dr=diskResources(Datenträgerinfo)
  #cr=cpuResources(cpu_info)
  #mr=memResources(Speicherinfo)
  #msr=mysqlResources(mysql_info)
  hr = Hostressourcen(CPU-Info, Mem-Info, Festplatteninfo, MySQL-Info, Argumente.Berichtstitel)
  jetzt = str(datetime.datetime.now()).replace(' ','^')
  wenn args.output_dir.endswith('/') != True:
    args.output_dir = args.output_dir + '/'
  Dateiname=args.output_dir+'mysql_inspection_{0}.html'.format(jetzt)
  mit open(filename,'w') als Ausgabe:
    Ausgabe.Schreiben(hr.__str__())
  drucken('[Bericht] der Bericht wurde in {0} gespeichert, ok... ....'.format(Dateiname))

Das obige MySQL-Inspektionsskript (unbedingt lesen) ist der gesamte Inhalt, den der Editor mit Ihnen teilt. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

<<:  Ausführliche Erklärung der Umgebungsvariablen und Konfigurationsdateien in CentOS

>>:  JavaScript, um den Effekt des Klickens auf das Untermenü zu erzielen

Artikel empfehlen

Zusammenfassung der Linux-Befehle zur Dateiverzeichnisverwaltung

Befehl „touch“ Es hat zwei Funktionen: Eine beste...

vue+echarts realisiert den Flusseffekt der China-Karte (detaillierte Schritte)

@vue+echarts realisiert den Flusseffekt der China...

So verwenden Sie Docker zum Bereitstellen eines Dubbo-Projekts

1. Verwenden Sie zunächst Springboot, um ein einf...

Linux Cron geplante Ausführung von PHP-Code mit Parametern

1. Verwenden Sie zur Ausführung weiterhin ein PHP...

JavaScript implementiert die Maussteuerung eines frei beweglichen Fensters

In diesem Artikel wird der spezifische JavaScript...

HTML-Tabellen-Tag-Tutorial (19): Zeilen-Tag

Die Attribute des <TR>-Tags werden verwende...

So legen Sie die Umgebungsvariable PATH im Linux-System fest (3 Methoden)

1. In Windows-Systemen erfordern viele Softwarein...

js realisiert die Funktion zum Klicken zum Wechseln der Karte

In diesem Artikelbeispiel wird der spezifische Co...

So verwenden Sie tcpdump zum Erfassen von Paketen im Linux-System

Lassen Sie mich zunächst einen Blick auf den Beis...

Optimierte Implementierung von count() für große MySQL-Tabellen

Das Folgende ist mein Urteil basierend auf der Da...

Einführung in den Aufbau eines DNS-Servers unter centos7

Inhaltsverzeichnis 1. Projektumgebung: 2: DNS-Ser...

So verwenden Sie das Vue-Router-Routing

Inhaltsverzeichnis 1. Beschreibung 2. Installatio...

Verständnis und Anwendungsszenarien von ES6-Erweiterungsoperatoren

Inhaltsverzeichnis 1. Ersetzen Sie die Apply-Meth...

Docker-Konfiguration Alibaba Cloud Container Service-Betrieb

Konfigurieren des Alibaba Cloud Docker Container ...