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 を一時的に無効にします。 永続的な解決策: 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`, 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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: docker run によって起動されたコンテナがハングしてデータが失われた場合の対処方法
>>: 同じページを動的にロードするための Vue ルーティングリスニングの例
Dockerfile は、イメージをビルドするために使用されるテキスト ファイルです。テキスト コン...
序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...
目次序文:システム要件:インストール環境:古いバージョンをアンインストールします: yum は具体的...
CSS3以前は、グラデーション画像は背景画像としてのみ使用できました。 CSS3 のグラデーション構...
1. Redisイメージを取得するdocker pull redis 2. それぞれポート6379、...
sudo 設定ファイルsudo のデフォルトの設定ファイルは /etc/sudoers です。一般的...
前回の投稿では、Web ページの作成方法について説明しました。Web サイトは多くの Web ページ...
KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...
VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...
1. 時刻の書式設定とその他の方法moment.jsライブラリファイルの使用をお勧めします2. テン...
パート0 背景社内のイントラネットサーバーは直接インターネットにアクセスすることはできませんが、外部...
序文要素がビューポート内にあるかどうかを監視する2つの方法を共有する1. 位置計算Element.g...
この記事では、クラス抽選アプレットを実装するためのJavaScriptの具体的なコードを参考までに紹...
EXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情報を提供します...
前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...