LoginSignup
3

More than 5 years have passed since last update.

CentOS6でMySQL Slow query logの出力及びlogrotate

Posted at

はじめに

ローカル環境(VMware player)で、MySQL Slow query log出力とlogrotate(FLUSH_LOG)を検証する事があったので覚書で記載します。

この記事読んで出来る事

・yum.confのproxy設定
・MySQL5.7をyumでインストール
・MySQLのログイン
・MySQLのパスワード再設定
・Slow query log出力の設定
・時間のかかるSQLを実行
・logrotate(FLUSH_LOG)の実行

yum.confのproxy設定

yumで外にファイルを取得しにいく場合、proxyを設定しないと
外に出れない事が多いと思います。私の環境もそうでした。
じゃあ、設定します。

①/etc/yum.confがある事を確認します。  
キャプチャ.JPG

②/etc/yum.confにproxy設定を追記します。
2キャプチャ.JPG
キャプチャ.JPG

もし、proxyサーバからusernameとuserpasswordの認証が必要な場合
下記の記述も追加してください。
※ユーザー名やパスワードに「@」が含まれている場合、proxy認証が失敗するので注意。
キャプチャ.JPG

これでもyumで外への接続が失敗するなら、VMware playerのネットワーク設定でアダプタがNATになっていないかもしれません。

MySQL5.7をyumでインストール

  1. Yumリポジトリを追加
    • CentOS6でのデフォルトリポジトリはMySQL5.1なので、ダウンロード先を指定する必要があります。
    • 該当リポジトリは公式ページで確認。 http://dev.mysql.com/downloads/repo/yum/
    • 追加します。 image.png
  2. 該当のリポジトリにて、MySQLのバージョンが5.7になってるか確認 2キャプチャ.JPG キャプ2チャ.JPG
  3. MySQL5.7をインストール
    2キャプチャ.JPG   2キャプチャ.JPG 2キャプチャ.JPG
  4. インストール確認
    2キャプチャ.JPG

MySQLのログイン

  1. サービスの起動
    2キャプチャ.JPG 2キャプチャ.JPG
  2. パスワードの確認
    MySQL5.7では初回起動と同時に、ランダムな文字列がパスワードとして設定されます。
    CentOSだと/var/log/mysqld.logに書き込まれます。では確認します。
    キャプチャ.JPG キャプチャ1.JPG
  3. ログイン 2キャプチャ.JPG

MySQLのパスワード再設定

  1. パスワードの再設定
    2キャプチャ.JPG 2キャプチャ.JPG
    ※5.7からパスワードポリシーが厳しくなったので注意

Slow query log出力の設定

  1. my.cnfファイルの設定
    • 設定ファイルに書き込む方法で設定します。
    • 3行追加します。 2キャプチャ.JPG
  2. 出力先の準備
    • 設定ファイルで指定した/var/log/mysqlのディレクトリとmysql_slow.logのファイルを作成し、mysqlが書き込めるように、ファイルの権限を設定します。
    • ディレクトリの作成
      2キャプチャ.JPG
    • ファイルの作成
      2キャプチャ.JPG
    • ファイルの権限設定
      2キャプチャ.JPG
    • サービスの再起動   2キャプチャ.JPG
    • ログの書き込みを確認 2キャプチャ.JPG

時間のかかるSQLを実行

知識ないんで、この方の記事を参考にして実行しました。 https://qiita.com/tt2004d/items/3983234eee51dc036bb0

logrotate(FLUSH_LOG)の実行

  • そもそもログのローテートとは?
  • システムが残す記録(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。
  • なので、動きとしては、ローテートされたログは、古いログがクリアされ0バイトから始まったりします。又古いログはログ名-日付とかで、新しく作られます。
  • Linuxにおける実行される流れを順々に追っていくと
    1. crontabに設定されている、設定(時間、パス)を参照してcronが実行される。 2キャプチャ.JPG
    2. Cronが/etc/cron.daily配下にあるlogrotateを見に行く 2キャプチャ.JPG
      logrotateコマンド(/usr/sbin/logrotate)で/etc/logrotate.confを読み込む
    3. logrotate.conf内で、includeで/etc/logrotate.d/ 配下にある各ログ個別の設定を読み込む 2キャプチャ.JPG 3キャプチャ.JPG 2キャプチャ.JPG
  • この流れで実行されます。
  • ローテートしたいログは一つだけなので、logrotate.d配下にローテート用の設定ファイルを作成します。
  • こんな感じです。
    2キャプチャ.JPG 3キャプチャ.JPG 2キャプチャ.JPG
  • MySQLに渡すDBUSERとPASSは、予め作成したdb_sessionを参照する様にします。
  • ローカル環境ですぐ確認したいのでdailyにしてます。
  • ログローテート後に、FLUSH LOGする様にしてます。これをしないと、ログの書き込み先が日付で作成されるログを指定したままで、作り直されたログに書き込まれません。
  • MYSQL_PWDを使用する事で、セキュアじゃないって怒られるエラーを回避。
  • ここまで設定しましたが、crontabに設定した時間が来ても初回のログローテートはされません。
  • 一度、/var/lib/logrotate.statusに、ローテートした日時を反映させる必要があります。
  • その為、一度手動でローテートさせます。 3キャプチャ.JPG 2キャプチャ.JPG
  • 時間を待ってられないので、直で/var/lib/logrotate.statusを編集します。 2キャプチャ.JPG 3キャプチャ.JPG
  • logrotateをテストで実行し、ローテートされるか確認します。 3キャプチャ.JPG
  • 「log needs rotating」と表示されているので、ローテートはされそうですね。
  • 詳細結果が見れるようにコマンド実行2キャプチャ.JPG
  • うまくいったっぽいです、該当ディレクトリ(/var/log/mysql配下)を見てみましょう。 2キャプチャ.JPG
  • 2つファイルが出来ている事から、ログのローテートはされました。新しく作られたmysql_slow.logの容量が183とある事から、FLUSH LOGもされてそうです。この状態で時間の掛かるSQLを流して、mysql_slow.logに書き込まれれば、FLUSH LOGは成功しています、やってみます。 2キャプチャ.JPG 3キャプチャ.JPG 2キャプチャ.JPG 3キャプチャ.JPG
  • ログの最後に、先ほど実行されたSQLがmysql_slow.logに書き込まれています、成功しました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3