MySQL データベース監視ソフトウェア lepus の使用上の問題と解決策

MySQL データベース監視ソフトウェア lepus の使用上の問題と解決策

lepus3.7 を使用して MySQL データベースを監視中に、次の問題が発生しました。このブログでは、これらの問題の原因と解決策について説明します。

1. 問題1: PHPページがデータベースに接続できない

php プログラムを直接使用して php ファイルを実行すると、mysql に接続できますが、httpd 内の同じ php ページは mysql に接続できません。

lepus Web プログラム (PHP コード) がデータベースに接続できない場合、Web インターフェイスで操作を実行できません。

この目的のために、最も単純な PDO 接続テスト コードを作成しました。

PHP コードは次のとおりです。

[x@coe2coe lepus]$ cat mysql.php
<?php
 試す{
 #$dsn="mysql:host=127.0.0.1;dbname=lepus;";
 $dsn="mysql:host=11.1.1.11;dbname=lepus;";
 ユーザーID
 $pwd="XXXXXXXXX";
 $sql="now() を a として選択します";
 $dbh = 新しい PDO ($dsn、$user、$pwd);
 $stmt = $dbh->を準備します($sql);
 $stmt->execute();
 $row = $stmt->fetch(PDO::FETCH_ASSOC);
 echo "結果:".$row['a'];
 }
 キャッチ(PDOException $e) {
 echo "失敗しました:".$e->getMessage();
 }
?>

php プログラムは php ファイルを直接実行します。

[x@coe2coe lepus]$ php mysql.php
結果:2018-09-27 00:03:44

ブラウザからこのページにアクセスしてください:

失敗:SQLSTATE[HY000] [2003] '11.1.1.11' の MySQL サーバーに接続できません (13)

lepus Web プログラムによって表示されるエラー メッセージはさらに曖昧です。

理由:

Baiduで検索したところ、ようやくもっと信頼できる分析が見つかりました。

Linux (CentOS7) の selinux セキュリティ メカニズムは、httpd 内のモジュールがネットワークにアクセスすることを禁止します。

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

解決:

一時的な解決策: SELINUX を一時的に無効にします。

[x@coe2coe lepus]$ sudo setenforce 0

永続的な解決策: selinux 構成ファイルを変更し、SELINUX を無効にします。

[x@coe2coe lepus]$ cat /etc/selinux/config
# このファイルはシステム上の SELinux の状態を制御します。
# SELINUX= は次の 3 つの値のいずれかを取ることができます。
# enforcing - SELinux セキュリティ ポリシーが適用されます。
# permissive - SELinux は強制する代わりに警告を出力します。
# 無効 - SELinux ポリシーはロードされません。
#SELINUX=強制
SELINUX=無効
# SELINUXTYPE= は次の 3 つの値のいずれかを取ることができます。
# 対象 - 対象プロセスは保護され、
# minimum - 対象ポリシーの変更。選択されたプロセスのみが保護されます。 
# mls - マルチレベルセキュリティ保護。
SELINUXTYPE=ターゲット

確認する:

ブラウザでこの PHP ページに再度アクセスします。

結果:2018-09-27 00:09:26

2.質問 2: lepus ログにグループ別の警告が表示されます。

2018-09-27 01:12:41 [警告] チェック mysql 11.1.1.11:3408 失敗: 1055 SELECT リストの式 #2 は GROUP BY 句内になく、GROUP BY 句内の列に機能的に依存しない非集計列 'information_schema.processlist.USER' が含まれています。これは sql_mode=only_full_group_by と互換性がありません。

理由:

これは、lepus バックエンド監視プログラムによって書き込まれたログです。

デフォルトでは、sql_mode には ONLY_FULL_GROUP_BY が含まれます。

mysql> @@sql_mode を選択します。
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
セット内の1行(0.01秒)

解決:

ONLY_FULL_GROUP_BYを削除します。

sql_mode=STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

3. 質問 3: レプリケーション監視でデータを照会できません。

データが見つかりません。

解決:

互換性を表示_56=1

4. 質問4: 表スペース分析にデータがありません。

5. 質問 5: 遅いクエリにはデータがありません。

前提:

スロー クエリ ログは、MySQL my.cnf 構成ファイルで構成されます。

遅いクエリログ=1

長いクエリ時間=10

ログ_遅い_管理_ステートメント=1

ログ_スロー_スレーブ_ステートメント=1

理由:

1.lepus スロー クエリ分析は、pecona-toolkit ツールキットの pt-query-digest プログラムに基づいています。まずこのツールキットをインストールする必要があります。

2. pt-query-digest プログラムは、lepus3.7 によって作成されたテーブルと競合します。

パイプライン プロセス 5 (反復) でエラーが発生しました: DBD::mysql::st 実行に失敗しました: 行 1 の列 'checksum' のデータが切り捨てられました [for ステートメント "REPLACE INTO `lepus`.`mysql_slow_query_review_history`(`checksum`, `sample`, `serverid_max`, `db_max`, `user_max`, `ts_min`,
.....
プロセス 4 (反復) でエラーが多すぎるため、パイプラインを終了します。

mysql_slow_query_review を変更します。

mysql> テーブル mysql_slow_query_review を変更します。チェックサム varchar(100) は null ではありません。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
レコード: 0 重複: 0 警告: 0
mysql_slow_query_review_history を変更します。
mysql> テーブル mysql_slow_query_review_history を変更します。チェックサム varchar(100) は null ではありません。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)
レコード: 0 重複: 0 警告: 0
mysql> テーブル mysql_slow_query_review_history を変更し、 serverid_max smallint(4) null を変更します。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)
レコード: 0 重複: 0 警告: 0

スクリプトを変更します。

元の lepus_slowquery.sh ファイルにはいくつか問題があります。

(1)lepus_server_idを手動で指定する必要があります。このスクリプトは各 MySQL サーバーに展開する必要があるため、監視する MySQL サーバーが多数ある場合は間違いが起こりやすくなります。

パラメータ lepus_server_id は非常に重要です。次のコードはこの ID を自動的に取得できます。

id=$( $mysql_client -h$lepus_db_host -P$lepus_db_port -u$lepus_db_user -p$lepus_db_password -e "$lepus_db_database.db_servers_mysql から id、ホスト、ポートを選択します。ここで、ホスト = '$mysql_host'、ポート = $mysql_port\G" 2>/dev/null |grep "id:" |awk -F": " '{print $2}')

(2)同じマシンに複数のMySQLサービスインスタンスが展開されている場合、別のスクリプトでローカルマシン上の複数のMySQLサービスインスタンスを同時にチェックするには、スケジュールされたタスクが1つだけ必要です。

全体的なタイミング スクリプトは次のとおりです。テスト中に 6 つの MySQL インスタンスが開かれ、ポートは 3306、3307、3308、3406、3407、3408 です。このうち、3306 と 3406 が MASTER で、その他は SLAVE です。この全体的なスクリプトでは、各インスタンスに対して lepus_slowquery.sh が呼び出されます。

[x@coe2coe mysql]$ cat slowquery.sh
##################################################################
# ファイル名:slowquery.sh
# 著者: [email protected]
# 作成日:2018-09-27
# 説明:http://www.cnblogs.com/coe2coe/
#################################################################
#!/bin/bash
ポート=(3306 3307 3308 3406 3407 3408)
私=0
[ $i -lt ${#ports[*]} ] の間
する
 ポート=${ポート[$i]}
 echo -e "/lepus_slowquery.sh $port"
 ./lepus_slowquery.sh $ポート 
 i=i+1とする
終わり

(3) オリジナルの lepus_slowquery.sh は MySQL のグローバル設定パラメータを変更します。個人的には変更する必要はないと思います。2 つの設定は、MySQL サーバーの my.cnf ファイルの設定に基づいている必要があります。lepus 監視システムを導入したからといって、このパラメータを勝手に変更すべきではありません。したがって、コードの最後の数行は直接コメントアウトされます。

長いクエリ時間
遅いクエリログファイル

変更された完全な lepus_slowquery.sh ファイルは次のとおりです。

[x@coe2coe mysql]$ cat lepus_slowquery.sh
#!/bin/bash
#************************************************************************#
# スクリプト名: /usr/local/sbin/lepus_slowquery.sh
# 作成日: 2014-03-25 10:01
# 変更日: 2014-03-25 10:01
#************************************************************************#
ポート=$1
id=$2
[ "$port" == "" ] の場合 || [ $port -lt 1 ] 
それから
 echo -e "無効な引数ポート"
 出口1
フィ
echo -e "mysql ポートは:{$port} "
#config lepus データベースサーバー
lepus_db_host="11.1.1.11"
lepus_db_port=3306
lepus_db_user="lepus_monitor"
lepus_db_password="XXXXXXXXX"
lepus_db_database="lepus"
#mysqlサーバーの設定
mysql_client="/usr/bin/mysql"
mysql_host="11.1.1.11"
mysql_port=$ポート
mysql_user="lepus_monitor"
mysql_password="XXXXXXXXX"
id=$( $mysql_client -h$lepus_db_host -P$lepus_db_port -u$lepus_db_user -p$lepus_db_password -e "$lepus_db_database.db_servers_mysql から id、ホスト、ポートを選択します。ここで、ホスト = '$mysql_host'、ポート = $mysql_port\G" 2>/dev/null |grep "id:" |awk -F": " '{print $2}')
[ "$id" == "" ] の場合 || [ $id -lt 1 ]
それから
 echo -e "無効な引数ID"
 出口2
フィ
echo -e "mysql lepus id は:{$id}"
#config スロークエリ
slowquery_dir="/tmp/"
slowquery_long_time=1
slowquery_file=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "'slow_query_log_file' のような変数を表示" 2>/dev/null |grep log|awk '{print $2}'`
pt_query_digest="/usr/bin/pt-query-digest"
#config サーバーID
lepus_server_id=$id
#MySQL スロークエリログを lepus データベースに収集する
$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} = length(\$event->{arg}) かつ \$event->{serverid}=$lepus_server_id " $slowquery_file > /tmp/lepus_slowquery.log
##### 新しいスロークエリログを設定します ###########
#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 スロークエリ
#$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "set global slow_query_log=1;set global long_query_time=$slowquery_long_time;" 2>/dev/null
#$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "グローバル slow_query_log_file を '$tmp_log' に設定します。"
#7日前にログを削除
#cd $slowquery_dir
#/usr/bin/find ./ -name 'slowquery_*' -mtime +7|xargs rm -rf ;
####終わり####

6. 質問6: Webの遅いクエリではlepusでデータが見つからない

遅いクエリは mysql_slow_query_review テーブルに記録されますが、lepus Web インターフェースにはデータがありません。

実行: select sleep(14) Webインターフェース上で照会できない場合があります。

原因: pt-query-digest によって生成された結果の db_max が NULL になり、クエリが失敗することがあります。

このフィールドの元のデータベースは NOT NULL ですが、NOT NULL の場合、pt-query-digest によって NULL データを挿入することがあり、エラーが発生します。そのため、NULL に変更されました。

これを NULL に変更すると、Web インターフェイスでのクエリに使用される PHP プログラムの SQL ステートメントに問題が発生します。NULL の状況が考慮されないため、この部分のデータのクエリが失敗します。

解決:

一時的にグローバルパラメータ general_log を開き、Web のスローログをクエリすると、SQL ステートメントをすばやく見つけることができ、この SQL ステートメントに基づいて問題のある PHP コードを見つけることができます。

application/controllers/lp_mysql.php 内の次のステートメントをコメントアウトします。

変更前:

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

変更後:

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

7. 質問7: ホスト監視の3つの項目にデータがありません。

原因: 監視ホストと監視対象ホストに snmpd と snmptrapd がインストールされていません。

解決:

すべてのホストに snmpd と snmptrapd をインストールします。

ソフトウェア パッケージ:

x@coe2coe snmp]$ ls ネット snmp*

ネットSNMP-5.7.2-32.el7.x86_64.rpm

ネットSNMPエージェントライブラリ5.7.2-32.el7.x86_64.rpm

ネットSNMP開発ツール5.7.2-32.el7.x86_64.rpm

ネットSNMPライブラリ5.7.2-32.el7.x86_64.rpm

ネット-snmp-perl-5.7.2-32.el7.x86_64.rpm

ネット-snmp-python-5.7.2-32.el7.x86_64.rpm

ネット-snmp-sysvinit-5.7.2-32.el7.x86_64.rpm

ネットSNMPユーティリティ5.7.2-32.el7.x86_64.rpm

これらのパッケージは CentOS7-everything-xxx.iso で入手できます。

インストールが完了したら、snmpd および snmptrapd サービスを開始します。

要約する

以上が、編集者が紹介したMySQLデータベース監視ソフトウェアlepusの使用上の問題と解決策です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL監視ツールmysql-monitorの詳細な説明
  • MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明
  • Grafana+Prometheus を使用して MySQL サービスのパフォーマンスを監視する
  • Zabbix を使用して Nginx/Tomcat/MySQL を監視する方法の詳細なチュートリアル
  • MySQL インデックス使用状況監視スキル (収集する価値あり!)
  • MySQLステートメントを監視する方法の詳細な説明
  • Zabbix が MySQL のマスター/スレーブ状態を監視する方法の詳細な説明
  • PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明
  • MySQLリアルタイム監視ツールorztopの使い方の紹介
  • 実際のシミュレーション監視MySQLサービスシェルスクリプトの概要
  • MySQLを監視するためのZabbixのインストールと設定に関する基本的なチュートリアル
  • MySQL監視グループレプリケーションについて簡単に説明します

<<:  docker run によって起動されたコンテナがハングしてデータが失われた場合の対処方法

>>:  同じページを動的にロードするための Vue ルーティングリスニングの例

推薦する

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...

LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

0x0 テスト環境本社本番サーバーと支社バックアップサーバーはリモートデータバックアップが必要です...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

自動ヘルスレポートを実現するDocker+Selenium方式

この記事では、ある大学の健康報告システムを例に、Web 側の自動化操作を完成させます。使用したテクノ...

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合docker pull dock...

Apache ポートに基づいて仮想ホストを作成する例

apache: ポートに基づいて仮想ホストを作成する仮想ホスト(a、b、c)の作成を例に挙げます1)...

Node.jsで子プロセスを作成する方法

目次導入子プロセスプロセスを非同期的に作成する同期作成プロセス導入Node.js のメイン イベント...

JS における for、for...in、for...of、forEach の違いと使用例

forループ基本的な構文形式: for(変数の初期化; 条件式; 演算式){ループ本体ステートメント...

MySQL シリーズ 11 ログ

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

MySQLは実際に分散ロックを実装できる

序文前回の記事では、eコマース シナリオでのフラッシュ セールの例を通じて、モノリシック アーキテク...

CSSのさまざまな背景、使用シナリオ、テクニックの詳細な分析

この記事はGitHub https://github.com/qq449245884/xiaozhi...

MySQL 5.7 でパスワードを変更する簡単な方法

これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...

Javascript 仮想 DOM の詳細な説明

目次仮想DOMとは何ですか?なぜ仮想DOMが必要なのでしょうか?仮想 DOM はどのようにして実際の...