Probleme und Lösungen bei der Nutzung der MySQL-Datenbanküberwachungssoftware Lepus

Probleme und Lösungen bei der Nutzung der MySQL-Datenbanküberwachungssoftware Lepus

Bei der Verwendung von lepus3.7 zur Überwachung der MySQL-Datenbank sind mir die folgenden Probleme begegnet. In diesem Blog werden die Ursachen dieser Probleme und die entsprechenden Lösungen beschrieben.

1. Problem 1: Die PHP-Seite kann keine Verbindung zur Datenbank herstellen

Durch direkte Verwendung des PHP-Programms zum Ausführen der PHP-Datei kann eine Verbindung zu MySQL hergestellt werden, aber dieselbe PHP-Seite in httpd kann keine Verbindung zu MySQL herstellen.

Wenn das Lepus-Webprogramm (PHP-Code) keine Verbindung zur Datenbank herstellen kann, können auf der Weboberfläche keine Vorgänge ausgeführt werden.

Zu diesem Zweck habe ich den einfachsten PDO-Verbindungstestcode geschrieben:

Der PHP-Code lautet wie folgt:

[x@coe2coe lepus]$ Katze mysql.php
<?php
 versuchen{
 #$dsn="mysql:host=127.0.0.1;dbname=lepus;";
 $dsn="mysql:host=11.1.1.11;dbname=lepus;";
 $Benutzer="coe2coe";
 $pwd="XXXXXXXXXX";
 $sql="Jetzt auswählen() als";
 $dbh=neues PDO($dsn,$user,$pwd);
 $stmt=$dbh->vorbereiten($sql);
 $stmt->execute();
 $row = $stmt->fetch(PDO::FETCH_ASSOC);
 echo "Ergebnis:".$row['a'];
 }
 Fang(PDOException $e) {
 echo "FEHLER:".$e->getMessage();
 }
?>

Das PHP-Programm führt die PHP-Datei direkt aus:

[x@coe2coe lepus]$ php mysql.php
Ergebnis:27.09.2018 00:03:44

Besuchen Sie diese Seite über Ihren Browser:

FAILED:SQLSTATE[HY000] [2003] Keine Verbindung zum MySQL-Server auf '11.1.1.11' möglich (13)

Noch mehrdeutiger sind die Fehlermeldungen des Lepus-Webprogramms.

Grund:

Nach einer Suche auf Baidu habe ich endlich eine zuverlässigere Analyse gefunden.

Der Selinux-Sicherheitsmechanismus von Linux (CentOS7) verbietet Modulen in httpd den Zugriff auf das Netzwerk.

[x@coe2coe lepus]$ sudo getsebool -a |grep httpd
httpd_anon_write --> aus
httpd_builtin_scripting --> ein
httpd_can_check_spam --> aus
httpd_can_connect_ftp --> aus
httpd_can_connect_ldap --> aus
httpd_can_connect_mythtv --> aus
httpd_can_connect_zabbix --> aus
httpd_can_network_connect --> aus
httpd_can_network_connect_cobbler --> aus
httpd_can_network_connect_db --> aus
httpd_can_network_memcache --> aus
httpd_can_network_relay --> aus
httpd_can_sendmail --> aus
httpd_dbus_avahi --> aus
httpd_dbus_sssd --> aus
httpd_dontaudit_search_dirs --> aus
httpd_enable_cgi --> ein
httpd_enable_ftp_server --> aus
httpd_enable_homedirs --> aus
httpd_execmem --> aus
httpd_graceful_shutdown --> ein
httpd_manage_ipa --> aus
httpd_mod_auth_ntlm_winbind --> aus
httpd_mod_auth_pam --> aus
httpd_read_user_content --> aus
httpd_run_ipa --> aus
httpd_run_preupgrade --> aus
httpd_run_stickshift --> aus
httpd_serve_cobbler_files --> aus
httpd_setrlimit --> aus
httpd_ssi_exec --> aus
httpd_sys_script_anon_write --> aus
httpd_tmp_exec --> aus
httpd_tty_comm --> aus
httpd_unified --> aus
httpd_use_cifs --> aus
httpd_use_fusefs --> aus
httpd_use_gpg --> aus
httpd_use_nfs --> aus
httpd_use_openstack --> aus
httpd_use_sasl --> aus
httpd_verify_dns --> aus

Lösung:

Temporäre Lösung: Deaktivieren Sie SELINUX vorübergehend.

[x@coe2coe lepus]$ sudo setenforce 0

Dauerhafte Lösung: Ändern Sie die Selinux-Konfigurationsdatei und deaktivieren Sie SELINUX.

[x@coe2coe lepus]$ cat /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System.
# SELINUX= kann einen dieser drei Werte annehmen:
# Erzwingen – Die SELinux-Sicherheitsrichtlinie wird erzwungen.
# permissiv – SELinux druckt Warnungen, anstatt sie zu erzwingen.
# deaktiviert – Es ist keine SELinux-Richtlinie geladen.
#SELINUX=erzwingen
SELINUX=deaktiviert
# SELINUXTYPE= kann einen von drei zwei Werten annehmen:
# gezielt - Gezielt werden Prozesse geschützt,
# Minimum - Änderung der gezielten Richtlinie. Nur ausgewählte Prozesse werden geschützt. 
# mls – Mehrstufiger Sicherheitsschutz.
SELINUXTYPE=zielgerichtet

verifizieren:

Rufen Sie diese PHP-Seite erneut im Browser auf:

Ergebnis:27.09.2018 00:09:26

2. Frage 2: Im Lepus-Protokoll wird eine Gruppierungswarnung angezeigt.

27.09.2018 01:12:41 [WARNUNG] MySQL 11.1.1.11:3408 Fehler prüfen: 1055 Ausdruck Nr. 2 der SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „information_schema.processlist.USER“, die nicht funktional von Spalten in der GROUP BY-Klausel abhängig ist; dies ist nicht kompatibel mit sql_mode=only_full_group_by

Grund:

Dies ist das vom Lepus-Backend-Überwachungsprogramm geschriebene Protokoll.

Standardmäßig enthält sql_mode ONLY_FULL_GROUP_BY.

mysql> wähle @@sql_mode;
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+---------------------------------------------------------------------------------------------------------------------------------------------------+
| NUR_VOLLSTÄNDIGE_GRUPPE_NUR, STRENGE_TRANS_TABELLEN, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION |
+---------------------------------------------------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,01 Sek.)

Lösung:

Entfernen Sie ONLY_FULL_GROUP_BY.

sql_mode=STRICT_TRANS_TABLES,KEINE_NULL_IM_DATUM,KEINE_NULL_DATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEIN_AUTO_CREATE_USER,KEINE_ENGINE_SUBSTITUTION

3. Frage 3: Im Replikationsmonitoring können keine Daten abgefragt werden.

Keine Daten gefunden.

Lösung:

Kompatibilität anzeigen_56 = 1

4. Frage 4: In der Tabellenbereichsanalyse sind keine Daten vorhanden.

5. Frage 5: Langsame Abfrage hat keine Daten.

Prämisse:

Das Protokoll für langsame Abfragen wurde in der MySQL-Konfigurationsdatei my.cnf konfiguriert.

langsames_Abfrageprotokoll = 1

lange_Abfragezeit=10

log_slow_admin_statements=1

log_slow_slave_statements=1

Grund:

1. Die langsame Abfrageanalyse von lepus basiert auf dem Programm pt-query-digest im Toolkit pecona-toolkit. Sie müssen zuerst dieses Toolkit installieren.

2. Das Programm pt-query-digest steht im Konflikt mit der von lepus3.7 erstellten Tabelle.

Pipeline-Prozess 5 (Iteration) hat einen Fehler verursacht: DBD::mysql::st-Ausführung fehlgeschlagen: Daten für Spalte „checksum“ in Zeile 1 abgeschnitten [für Anweisung „REPLACE INTO `lepus`.`mysql_slow_query_review_history`(`checksum`, `sample`, `serverid_max`, `db_max`, `user_max`, `ts_min`,
.....
Pipeline wird beendet, da Prozess 4 (Iteration) zu viele Fehler verursacht hat.

Ändern Sie mysql_slow_query_review:

mysql> Tabelle ändern mysql_slow_query_review Prüfsumme ändern varchar(100) nicht null;
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0
Ändern Sie mysql_slow_query_review_history:
mysql> Tabelle ändern mysql_slow_query_review_history Prüfsumme ändern varchar(100) nicht null;
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0
mysql> Tabelle ändern mysql_slow_query_review_history ändern serverid_max smallint(4) null;
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

Ändern Sie das Skript:

Es gibt einige Probleme mit der ursprünglichen Datei lepus_slowquery.sh.

(1) lepus_server_id muss manuell angegeben werden. Dieses Skript muss auf jedem MySQL-Server bereitgestellt werden. Daher können leicht Fehler passieren, wenn viele MySQL-Server überwacht werden müssen.

Der Parameter lepus_server_id ist sehr wichtig. Der folgende Code kann diese ID automatisch abrufen.

id=$( $mysql_client -h$lepus_db_host -P$lepus_db_port -u$lepus_db_user -p$lepus_db_password -e "Wählen Sie ID, Host, Port aus $lepus_db_database.db_servers_mysql, wobei Host='$mysql_host' und Port=$mysql_port\G" 2>/dev/null |grep "id:" |awk -F": " '{print $2}')

(2) Wenn mehrere MySQL-Dienstinstanzen auf derselben Maschine bereitgestellt werden, sollte nur eine geplante Aufgabe erforderlich sein, um in einem anderen Skript mehrere MySQL-Dienstinstanzen auf der lokalen Maschine gleichzeitig zu überprüfen.

Das gesamte Timing-Skript sieht wie folgt aus. Während des Tests wurden sechs MySQL-Instanzen geöffnet und die Ports sind: 3306 3307 3308 3406 3407 3408. Unter ihnen sind 3306 und 3406 MASTER und die anderen sind SLAVE. In diesem Gesamtskript wird für jede Instanz lepus_slowquery.sh aufgerufen.

[x@coe2coe mysql]$ Katze slowquery.sh
##################################################################
# Dateiname: slowquery.sh
# Autor: [email protected]
# Erstellt: 2018-09-27
# Beschreibung: http://www.cnblogs.com/coe2coe/
#################################################################
#!/bin/bash
Ports = (3306 3307 3308 3406 3407 3408)
ich = 0
während [ $i -lt ${#ports[*]} ]
Tun
 Port=${Ports[$i]}
 echo -e "/lepus_slowquery.sh $port"
 ./lepus_slowquery.sh $port 
 sei i = i + 1
Erledigt

(3) Die ursprüngliche Datei lepus_slowquery.sh ändert die globalen Konfigurationsparameter von MySQL. Ich persönlich denke, dass sie nicht geändert werden muss. Die beiden Konfigurationen sollten weiterhin auf der Konfiguration in der Datei my.cnf des MySQL-Servers basieren. Dieser Parameter sollte nicht willkürlich geändert werden, nur weil ein Lepus-Überwachungssystem bereitgestellt wird. Daher werden die letzten Codezeilen direkt auskommentiert.

lange_Abfragezeit
langsame_Abfrage-Protokolldatei

Die geänderte vollständige Datei lepus_slowquery.sh sieht wie folgt aus:

[x@coe2coe mysql]$ Katze lepus_slowquery.sh
#!/bin/bash
#********************************************************************#
# Skriptname: /usr/local/sbin/lepus_slowquery.sh
# Erstellungsdatum: 2014-03-25 10:01
# Änderungsdatum: 2014-03-25 10:01
#********************************************************************#
Hafen=$1
Ich würde sagen, $2
wenn [ "$port" == "" ] || [ $port -lt 1 ] 
Dann
 echo -e "ungültiger Argumentport"
 Ausfahrt 1
fi
echo -e "MySQL-Port ist: {$port}"
#config Lepus-Datenbankserver
lepus_db_host="11.1.1.11"
lepus_db_port=3306
lepus_db_user="lepus_monitor"
lepus_db_password="XXXXXXXXXX"
lepus_db_database="Lepus"
#config MySQL-Server
mysql_client="/usr/bin/mysql"
mysql_host="11.1.1.11"
mysql_port=$port
mysql_user="lepus_monitor"
mysql_password="XXXXXXXXXX"
id=$( $mysql_client -h$lepus_db_host -P$lepus_db_port -u$lepus_db_user -p$lepus_db_password -e "Wählen Sie ID, Host, Port aus $lepus_db_database.db_servers_mysql, wobei Host='$mysql_host' und Port=$mysql_port\G" 2>/dev/null |grep "id:" |awk -F": " '{print $2}')
wenn [ "$id" == "" ] || [ $id -lt 1 ]
Dann
 echo -e "ungültige Argument-ID"
 Ausfahrt 2
fi
echo -e "mysql lepus id ist: {$id}"
#config langsame Anfrage
slowquery_dir="/tmp/"
langsame Abfrage_lange_Zeit = 1
slowquery_file=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "zeige Variablen wie 'slow_query_log_file'" 2>/dev/null |grep log|awk '{print $2}'`
pt_query_digest="/usr/bin/pt-query-digest"
#config Server-ID
lepus_server_id=$id
#MySQL-SlowQuery-Log in der Lepus-Datenbank erfassen
$pt_query_digest --user=$lepus_db_user --password=$lepus_db_password --port=$lepus_db_port --review h=$lepus_db_host,D=$lepus_db_database,t=mysql_slow_query_review --history h=$lepus_db_host,D=$lepus_db_database,t=mysql_slow_query_review_history --no-report --limit=100% --filter=" \$event->{add_column} = Länge(\$event->{arg}) und \$event->{serverid}=$lepus_server_id " $slowquery_file > /tmp/lepus_slowquery.log
##### ein neues Protokoll für langsame Abfragen festlegen ############
#tmp_log=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "select concat('$slowquery_dir','slowquery_', '$port','_', date_format(now(),'%Y%m%d%H'),'.log');" 2>/dev/null |grep log|sed -n -e '2p'`
#config MySQL langsame Abfrage
#$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "globales slow_query_log festlegen=1;globale long_query_time festlegen=$slowquery_long_time;" 2>/dev/null
#$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "globale slow_query_log_file festlegen = '$tmp_log'; "
#Protokoll vor Ablauf der Frist löschen
#cd $slowquery_dir
#/usr/bin/find ./ -name 'slowquery_*' -mtime +7|xargs rm -rf ;
####ENDE####

6. Frage 6: Langsame Webabfrage kann keine Daten in Lepus finden

Langsame Abfragen werden in der Tabelle mysql_slow_query_review aufgezeichnet, aber es gibt keine Daten auf der Lepus-Weboberfläche.

Ausführen: select sleep(14). Eine Abfrage über die Weboberfläche ist teilweise nicht möglich.

Ursache: Manchmal ist db_max im von pt-query-digest generierten Ergebnis NULL, was zu einem Abfragefehler führt.

Die ursprüngliche Datenbank für dieses Feld ist NICHT NULL, aber im Fall von NICHT NULL fügt pt-query-digest manchmal NULL-Daten ein, was einen Fehler verursacht. Daher wurde es in NULL geändert.

Nach der Änderung auf NULL liegt ein Problem mit der SQL-Anweisung des PHP-Programms vor, das für die Abfrage in der Weboberfläche verwendet wird. Die NULL-Situation wird nicht berücksichtigt, was dazu führt, dass die Abfrage dieses Teils der Daten fehlschlägt.

Lösung:

Öffnen Sie vorübergehend den globalen Parameter general_log und fragen Sie dann das langsame Protokoll des Webs ab. Sie können die SQL-Anweisung schnell finden und dann basierend auf dieser SQL-Anweisung den problematischen PHP-Code finden.

Kommentieren Sie die folgenden Anweisungen in application/controllers/lp_mysql.php aus.

Vor der Änderung:

$this->db->where( "b.db_max !=", 'information_schema'");

Nach der Änderung:

//$this->db->where( "b.db_max !=", 'information_schema'");

7. Frage 7: In den drei Elementen der Hostüberwachung sind keine Daten vorhanden.

Ursache: snmpd und snmptrapd sind auf dem Überwachungshost und dem überwachten Host nicht installiert.

Lösung:

Installieren Sie snmpd und snmptrapd auf allen Hosts.

Softwarepakete:

x@coe2coe snmp]$ ls net-snmp*

net-snmp-5.7.2-32.el7.x86_64.rpm

net-snmp-agent-libs-5.7.2-32.el7.x86_64.rpm

net-snmp-devel-5.7.2-32.el7.x86_64.rpm

net-snmp-libs-5.7.2-32.el7.x86_64.rpm

net-snmp-perl-5.7.2-32.el7.x86_64.rpm

net-snmp-python-5.7.2-32.el7.x86_64.rpm

net-snmp-sysvinit-5.7.2-32.el7.x86_64.rpm

net-snmp-utils-5.7.2-32.el7.x86_64.rpm

Diese Pakete sind auf CentOS7-everything-xxx.iso verfügbar.

Nachdem die Installation abgeschlossen ist, starten Sie die Dienste snmpd und snmptrapd.

Zusammenfassen

Oben sind die vom Herausgeber vorgestellten Nutzungsprobleme und Lösungen der MySQL-Datenbanküberwachungssoftware Lepus aufgeführt. Ich hoffe, dass sie für alle hilfreich sind. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des MySQL-Überwachungstools mysql-monitor
  • Detaillierte Erläuterung der Überwachung von Spaltenüberläufen ohne Primärschlüssel in MySQL-Tabellen
  • Verwenden Sie Grafana+Prometheus, um die Leistung des MySQL-Dienstes zu überwachen
  • Detailliertes Tutorial zur Überwachung von Nginx/Tomcat/MySQL mit Zabbix
  • Kenntnisse zur Überwachung der MySQL-Indexnutzung (es lohnt sich, sie zu erwerben!)
  • Detaillierte Erklärung zur Überwachung von MySQL-Anweisungen
  • Detaillierte Erklärung, wie Zabbix den Master-Slave-Status von MySQL überwacht
  • Detaillierte Erläuterung der Leistungsüberwachung des MySQL-Servers mit Prometheus und Grafana
  • Einführung in die Verwendung des MySQL-Echtzeitüberwachungstools orztop
  • Zusammenfassung des eigentlichen Simulationsüberwachungs-MySQL-Dienst-Shell-Skripts
  • Grundlegendes Tutorial zur Installation und Konfiguration von Zabbix zur Überwachung von MySQL
  • Beschreiben Sie kurz die Replikation der MySQL-Überwachungsgruppe

<<:  Detaillierte Erklärung zur Verwendung von Teleport in Vue3

>>:  Was tun, wenn der von Docker Run gestartete Container hängt und Daten verliert?

Artikel empfehlen

Implementierung der CSS-Bildlaufleisten-Stileinstellungen

WebKit-Bildlaufleistenstil zurücksetzen 1. Die Bi...

Spezifische Verwendung von pthread_create in Linux zum Erstellen von Threads

pthread_create-Funktion Funktionseinführung pthre...

Zusammenfassung der Mysql Hochleistungsoptimierungsfähigkeiten

Datenbank-Befehlsspezifikation Alle Datenbankobje...

Implementierungscode für die teilweise Aktualisierung einer HTML-Seite

Aktualisierung der Ereignisantwort: Aktualisierun...

Detaillierte Erklärung der in Node.js integrierten Module

Inhaltsverzeichnis Überblick 1. Pfadmodul 2. Bis ...

Probleme und Lösungen für MYSQL5.7.17-Verbindungsfehler unter MAC

Das Problem, dass MYSQL5.7.17 unter MAC keine Ver...

Eine detaillierte Einführung in for/of, for/in in JavaScript

Inhaltsverzeichnis In JavaScript gibt es mehrere ...

Ein tiefer Einblick in JavaScript-Promises

Inhaltsverzeichnis 1. Was ist Promise? 2. Warum g...

Lösung zur Schnittstellenverformung beim Einstellen der Frameset-Höhe

Derzeit habe ich ein Projekt erstellt, die Schnitt...

Lösung für vergessenes Linux MySQL-Root-Passwort

Wenn Sie sich bei der Verwendung der MySQL-Datenb...