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. 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`, Ä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 zur Verwendung von Teleport in Vue3
>>: Was tun, wenn der von Docker Run gestartete Container hängt und Daten verliert?
WebKit-Bildlaufleistenstil zurücksetzen 1. Die Bi...
pthread_create-Funktion Funktionseinführung pthre...
Erster Schritt: Klicken Sie in VMware auf "B...
Inhaltsverzeichnis 1. Hauptfunktionen 2. Umsetzun...
Vorwort Wenn wir bestimmte Zeilen in einer Datei ...
Datenbank-Befehlsspezifikation Alle Datenbankobje...
Es ist sehr mühsam, eine virtuelle Maschine einzu...
Aktualisierung der Ereignisantwort: Aktualisierun...
Inhaltsverzeichnis Überblick 1. Pfadmodul 2. Bis ...
Das Problem, dass MYSQL5.7.17 unter MAC keine Ver...
Inhaltsverzeichnis In JavaScript gibt es mehrere ...
Inhaltsverzeichnis 1. Was ist Promise? 2. Warum g...
Derzeit habe ich ein Projekt erstellt, die Schnitt...
Wenn Sie sich bei der Verwendung der MySQL-Datenb...
Inhaltsverzeichnis vue2.x Vorkonzept: Routing-Hoo...