レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

MySQLのログの種類とログの仕方を調べてみた(実施例)

2012年11月9日 2015年5月14日
mysql logging

今回は、MySQLでロギングを行ってみます。

一口にロギングと言ってもMySQLでは、以下の4つの種類があります。

今回は、上記4つのロギングをとり方について、簡単に解説してみます。

MySQLでロギングを行う

各ログの種類ごとに以下に簡単に解説します。

各ロギングの設定例では、mysqlの設定ファイルを一律 /etc/my.cnf としています。
これは、RedHat系(CentoOS,Scientific Linuxなど)のデフォルトの設定ファイルになります。
Deabin系(Debian,Ubuntuなど)では、/etc/mysql/my.cnf というディレクトリ配下がデフォルトになっています。ファイルの場所の違いに注意してください。 もちろん、設定する内容は同じです。

エラー ログ

エラー ログは、システムロギングとも言われ
mysqld (サーバー)の起動、実行、停止のロギング、また発生した問題のエラー情報などをロギングします。


  • ロギング例

    以下は、mysqld (サーバー)起動時のロギングの出力例です。以下の中で[Note] は、注意です。エラーは、[Error] 、警告は、[Warning] と表記されます。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    121109 15:21:56 InnoDB: The InnoDB memory heap is disabled
    121109 15:21:56 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
    121109 15:21:56 InnoDB: Compressed tables use zlib 1.2.3
    121109 15:21:56 InnoDB: Initializing buffer pool, size = 16.0M
    121109 15:21:56 InnoDB: Completed initialization of buffer pool
    121109 15:21:56 InnoDB: highest supported file format is Barracuda.
    121109 15:21:56 InnoDB: Waiting for the background threads to start
    121109 15:21:57 InnoDB: 1.1.8 started; log sequence number 2511587907
    121109 15:21:57 [Note] Event Scheduler: Loaded 0 events
    121109 15:21:57 [Note] /usr/libexec/mysqld: ready for connections.
    Version: '5.5.28-log'  socket: ''  port: 3306  MySQL Community Server (GPL)
    ...

  • ロギング設定

    このロギングを行うには、mysqlの設定ファイル(/etc/my.cnf)以下の設定を行います。

    ...
    [mysqld]
    ...
    #  Error log
    log_error="/var/log/mysql/mysqld.log"
    log_warnings=1
    ...
    log_error
    エラーログのファイル名を設定します。
    log_warnings
    警告も全て出力する場合は、1を設定します。0は出力しません。また0の場合、接続を中断した情報をエラーログに出力しないので注意が必要です。
    システム変数(my.cnfで設定するパラメータ)は、ハイフォン(“-“)を使わなくなりました。 おそらく、mysqld の起動オプションでハイフォン(“-“)を使って、システム変数では使わなくしてはっきり区別しているのだと思います。

    そこで、ここのシステム変数も以前は、
    log-err → log_error
    log-warnings → log_warnings
    と変化している点に注意してください。
    基本的に両方の名前が利用できるようになっていますが、そのうち、ハイフォンは無くなると思います。ハイフォン使用の変数を使っていると起動時に Warning が出力されます。


一般クエリ ログ

一般クエリ ログは、クエリ(SQL)ロギングとも言われ
mysqld (サーバー)がクライアントとの接続と実行したクエリ(SQL)をロギングします。


  • ロギング例

    以下は、Wordpressのサイトを起動した際のロギングの出力例です。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    /usr/libexec/mysqld, Version: 5.5.28-log (MySQL Community Server (GPL)). started with:
    TCP Port: 3306, Named Pipe: /var/lib/mysql/mysql.sock
    Time                 Id Command    Argument
    121109  2:25:17	    1 Connect	hoge@localhost on 
    		    1 Query	SET NAMES utf8
    		    1 Init DB	hoge
    		    1 Query	SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
    		    1 Query	SELECT option_value FROM wp_options WHERE option_name = 'akismet_comment_nonce' LIMIT 1
    		    1 Query	SHOW TABLES LIKE 'wp_comment_rating'
    		    1 Query	UPDATE `wp_options` SET `option_value` = '0' WHERE `option_name` = 'del_revision_getPosts'
    		    1 Query	SELECT option_value FROM wp_options WHERE option_name = 'smilies_themer' LIMIT 1
    		    1 Query	SELECT option_value FROM wp_options WHERE option_name = '_transient_timeout_doing_cron' LIMIT 1
    		    1 Query	SELECT autoload FROM wp_options WHERE option_name = '_transient_doing_cron'
    		    1 Query	SELECT autoload FROM wp_options WHERE option_name = '_transient_timeout_doing_cron'
    		    1 Query	SELECT option_value FROM wp_options WHERE option_name = '_transient_doing_cron' LIMIT 1
    		    1 Query	INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('_transient_doing_cron', '1352395517', 'yes') ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)
    ...
    • 1行目 : mysqldのバージョン表記と開始のログ
    • 2行目 : tcpポート番号、パイプ名のログ
    • 3行目 : 4行目からのタイトル出力
    • 4行目 : 日付 (121109 → 2012/11/09 のこと) 時間 ID番号 コマンド(Connect:接続の意味) パラメータ(hoge@localhost on → localhostのhogeさんが接続してきたの意味)


      以降は、日時については、同じID番号の場合、省略されます。

      コマンドにQueryとある行は、SQLが処理されているロギングになります。


  • ロギング設定

    このロギングを行うには、mysqlの設定ファイル(/etc/my.cnf)以下の設定を行います。

    ...
    [mysqld]
    ...
    #  Query log
    log="/var/log/mysql/sql.log"
    ...
    log
    一般クエリログを採取するか否か示します。一般的に、ここにログファイル名を指定することで、有効にします。 キーのlogのみを指定して、ファイル名を指定しない場合は、ホスト名.log のファイル名で保存されます。
    ロギングしたくない場合は、キーのlog自体を削除します。
    先の設定例は、古くからある設定方法のようで、以下のような設定でも行うことができるようになっています。
    ...
    [mysqld]
    ...
    #  Query log
    general_log=1
    general_log_file="/var/log/mysql/sql.log"
    log_output=FILE
    ...
    general_log
    一般クエリログを採取するか否か示します。1:ロギングする、0:ロギングしない
    general_log_file
    一般クエリログのファイル名を設定します。指定しない場合は、ホスト名.log のファイル名で保存されます。
    log_output
    一般クエリログとスロークエリログの出力先ディレクトリを設定します。
    TABLE:テーブルへのログ、FILE:ファイルへのログ、NONE:テーブルまたはファイルにログしない のいずれか。


バイナリ ログ

バイナリ ログは、バイナリ(バックアップ)ロギングとも言われ
mysqld (サーバー)のデータ変更のステートメントをバイナリ情報でロギングします。また、レプリケーションにも使用されます。


  • ロギング例

    バイナリ情報なので、直接中身をみてもわかりません。
    mysqlbinlogコマンドを使ってロギングされている内容を確認することができます。

    $ mysqlbinlog /var/log/mysql/bin.000002 --start-datetime "2012-11-09 03:47:00" --stop-datetime "2012-11-09 03:48:00"
    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #121109  2:24:33 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.28-log created 121109  2:24:33 at startup
    ROLLBACK/*!*/;
    BINLOG '
    0eqbUA8BAAAAZwAAAGsAAAAAAAQANS41LjI4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR6ptQEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
    '/*!*/;
    # at 44447
    #121109  3:47:30 server id 1  end_log_pos 44516         Query   thread_id=11 exec_time=0     error_code=0
    SET TIMESTAMP=1352400450/*!*/;
    SET @@session.pseudo_thread_id=11/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=0/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!\C utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    BEGIN
    /*!*/;
    # at 44516
    #121109  3:47:30 server id 1  end_log_pos 44679         Query   thread_id=11 exec_time=0     error_code=0
    use hoge/*!*/;
    SET TIMESTAMP=1352400450/*!*/;
    UPDATE `wp_options` SET `option_value` = '0' WHERE `option_name` = 'del_revision_getPosts'
    /*!*/;
    ...

    mysqlbinlogコマンドにバイナリログのファイル名を指定するとロールバック用のSQL文が出力されます。
    バイナリログがバックアップログといわれるところは、バイナリログがあれば、好きな位置へロールバック(戻る)ことができる点にあります。


  • ロギング設定

    このロギングを行うには、mysqlの設定ファイル(/etc/my.cnf)以下の設定を行います。

    ...
    [mysqld]
    ...
    #  Binary log
    log_bin="/var/log/mysql/bin.log"
    log_bin_index="/var/log/mysql/bin.list"
    max_binlog_size=1M
    expire_logs_days=1
    ...
    log_bin
    バイナリ ログ を採取するか否か示します。ここにログファイル名を指定することで、有効にします。
    log_bin_index
    バイナリ ログ インデックス ファイル名を設定します。バイナリログ ファイル名を管理するためのファイルの名前になります。
    max_binlog_size
    バイナリログの最大ファイルサイズを指定します。ここで指定したファイルサイズを超えた場合は、ローテートします。設定可能な値は、4096 バイト以上 1 GB (デフォルト) 以下です。
    expire_logs_days
    バイナリログの保存期間を日数で指定します。この日数を超えたものは削除されます。デフォルト 0 は、削除しません。
    上記以外にもバイナリログに関しては、色々と設定できるようになっています。例えば、

    binlog_format : バイナリ ロギング形式。STATEMENT(デフォルト)、ROW、MIXED のどれかになる。

    これ以外にも、まだあります。詳しく、http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html を参照してください。

    また、システム変数(my.cnfで設定するパラメータ)は、ハイフォン(“-“)を使わなくなりました。 おそらく、mysqld の起動オプションでハイフォン(“-“)を使って、システム変数では使わなくしてはっきり区別しているのだと思います。

    そこで、ここのシステム変数も以前は、
    log-bin → log_bin
    log-bin-index → log_bin_index
    max-binlog-size → max_binlog_size
    expire-logs-days → expire_logs_days
    と変化している点に注意してください。
    基本的に両方の名前が利用できるようになっていますが、expire-logs-days については、少なくとも 5.5では使えなくなっています。
    仮に使えても、ハイフォン使用の変数を使っていると起動時に Warning が出力されます。

スロー クエリ ログ

スロー クエリ ログは、スロー クエリ (デバッグ)ロギングとも言われ
mysqld (サーバー)で long_query_time で指定した秒数より時間を要したクエリ(SQL)、またはインデックスを使用しなかったクエリ(SQL)のロギングを行います。


  • ロギング例

    以下は、Wordpressのサイトを起動した際のロギングの出力例です。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    # Time: 121109  3:44:23
    # User@Host: hoge[hoge] @ localhost [127.0.0.1]
    # Query_time: 0.015625  Lock_time: 0.000000 Rows_sent: 6  Rows_examined: 1442
    SET timestamp=1352400263;
    SELECT DISTINCT wp_posts.*, ROUND((select AVG(rating0) from wp_post_judge where  ( wp_post_judge.post_id = wp_posts.ID AND wp_post_judge.rating0<>0 )),2) AS ratings_average  
    	
    	FROM wp_posts 
    		INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
    		INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
    	 
    	WHERE 
    		wp_posts.post_password = '' AND 
    		wp_posts.post_date < '2012-11-09 03:44:23' AND 
    		wp_posts.post_status = 'publish' AND 
    		wp_term_taxonomy.taxonomy = 'category' AND 
    		wp_term_taxonomy.term_id in (6) 
    	 
    	ORDER BY ratings_average DESC;
    ...
    • 1行目 : 日時(前ログと同じ場合は省略されることがあります)
    • 2行目 : 接続ユーザ、ホスト名
    • 3行目 : Query_time : クエリ実行時間、Lock_time : テーブル or データベースがロックされた時間、Rows_examined : 処理対象となった行数
    • 4行目以降 : 実際のSQL文

      ...
      Query_timeは、CPU処理時間でなく、実際のリアクションするまでの時間なので、レスポンスが遅い場合などは、このログを見ると遅延箇所がはっきりします。


  • ロギング設定

    このロギングを行うには、mysqlの設定ファイル(/etc/my.cnf)以下の設定を行います。

    ...
    [mysqld]
    ...
    #  Slow Query log
    slow_query_log=1
    slow_query_log_file="/var/log/mysql/slow.log"
    log_queries_not_using_indexes
    log_slow_admin_statements
    slow_query_log
    スロークエリログを採取するか否か示します。1:ロギングする、0:ロギングしない
    slow_query_log_file
    スロークエリログのファイル名を設定します。指定しない場合は、general_log_file に従います。
    long_query_time
    クエリの処理時間(秒単位)を指定します。この秒数を超えるとスロー クエリ ログに出力されます。
    log_queries_not_using_indexes
    インデックスしていないクエリを全て出力する場合に指定します。
    log_slow_admin_statements
    管理用のステートメント(OPTIMIZE TABLE、ANALYZE TABLE、ALTER TABLE など) についても同様に処理に時間がかかるものをロギングしたい場合に指定します。
    システム変数(my.cnfで設定するパラメータ)は、ハイフォン("-")を使わなくなりました。 おそらく、mysqld の起動オプションでハイフォン("-")を使って、システム変数では使わなくしてはっきり区別しているのだと思います。

    そこで、ここのシステム変数も以前は、
    log-slow-queries → slow_query_log , slow_query_log_file
    long-query-time → long_query_time
    log-queries-not-using-indexes → log_queries_not_using_indexes
    log-slow-admin-statements → log_slow_admin_statements
    と変化している点に注意してください。
    基本的に両方の名前が利用できるようになっていますが、そのうち、ハイフォンは無くなると思います。ハイフォン使用の変数を使っていると起動時に Warning が出力されます。

ざっと、こんな感じです。

色々なログがありますが、用途によって必要なもの不必要なものがあるかと思います。臨機応変に使いこなせば、かなりメンテナンスの助けになることは間違いないでしょう。

まずは、お試しあれ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

mysqlでUnsafe statement written to the binary log using statement の警告が出た時の対処

mysql のレプリケーションを使っている時、以下のような警告メッセージが出力されることがあります。 130529 12:22:26 [W ...

mysqlのレプリケーションを使う

今回は、mysqlのレプリケーション(replication)です。 レプリケーション(replication)とは、 直訳 ...

mysqlでマルチマスター レプリケーションを設定してみる

以前の記事 mysqlのレプリケーションを使う で mysqlを使ったレプリケーションの設定を行ってみました。 今回は、そのmysqlのレプリ ...

mysql5.5系の最新版をインストールする

CentOS 5 の場合、yumを使って デフォルトでインストールされるのは、MySQL5.0系です。 また、CentOS 6 Sc ...

MySQLのバイナリログを使ったロールバック(リストア)を行ってみる

以前の記事 MySQLのログの種類とログの仕方を調べてみた(実施例) で、MySQLのログの採取方法について簡単に解説してみました。 その中の ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2093 [s]