crontabで定期的にMySQLクエリ発行
こんにちは。技術部のKです。
サーバの運用や保守をしていると、
障害調査などで特定の時間帯でのMySQL状況を確認したい!なんて時がありますよね。
今回はそんなMySQL状況を定期的に取得してテキストに出力する機会がありましたので
例をご紹介します。
今回は、あくまで例ですが
実行中のプロセスの一覧と、クエリキャッシュに関する統計情報を取得する想定で
以下のシェルスクリプトを作成しました。
mysql_info.sh
#!/bin/bash
# データベース接続情報を設定
DB_USER="your_username"
DB_PASS="your_password"
# 出力ファイル名を設定
OUTPUT_FILE="/data/mysql_info_$(date +%Y%m%d_%H%M%S).txt"
# 現在の日時を出力ファイルに記録
echo "Execution Time: $(date)" > $OUTPUT_FILE
echo "------------------------------" >> $OUTPUT_FILE
# 実行中のプロセスの一覧結果を出力ファイルに追記
echo "show processlist:" >> $OUTPUT_FILE
mysql -u $DB_USER -p$DB_PASS -e "show processlist;" >> $OUTPUT_FILE
echo "------------------------------" >> $OUTPUT_FILE
# クエリキャッシュに関する統計情報結果を出力ファイルに追記
echo "show global status like '%QCache%':" >> $OUTPUT_FILE
mysql -u $DB_USER -p$DB_PASS -e "show global status like '%QCache%';" >> $OUTPUT_FILE
※パスワードをそのままシェルスクリプトに記述するのがセキュリティ上不安という方なら
別のファイルにログイン情報を書き出して、それを読み込ませる方法もございます。
毎日10時~18時の間、毎時00分に取得する想定をしました。
# crontab -e
--------------------------------------------
0 10-18 * * * /data/mysql_info.sh 2>&1
--------------------------------------------
出力結果はこんな感じです。
[root@server01 ~]# cat /data/mysql_info_20240401_100001.txt
Execution Time: 2024年 4月 1日 月曜日 10:00:01 JST
------------------------------
show processlist:
Id User Host db Command Time State Info Progress
141 root localhost NULL Query 0 starting show processlist 0.000
------------------------------
show global status like '%QCache%':
Variable_name Value
Qcache_free_blocks 1
Qcache_free_memory 1031272
Qcache_hits 0
Qcache_inserts 0
Qcache_lowmem_prunes 0
Qcache_not_cached 0
Qcache_queries_in_cache 0
Qcache_total_blocks 1
なにかしらの参考になれば幸いです!
なにかお困りごとがありましたら弊社までご相談ください!
どうぞ今後ともネットアシストをよろしくお願い致します。