テックブログ

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

なにかしらの参考になれば幸いです!

なにかお困りごとがありましたら弊社までご相談ください!

どうぞ今後ともネットアシストをよろしくお願い致します。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください