2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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
  1. 出力先の準備
  • 設定ファイルで指定した/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に書き込まれています、成功しました。
2
3
0

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?