当サイトには広告が含まれております

XAMPPでMySQLのログを各バージョン別で確認する方法

この記事は最終更新日から8年経過しています。内容が古い可能性があります。

WindowsOSのPCでWebプログラムの開発をしています。開発環境としてはXAMPPを使っています。WordPressなどを動かしたときに実際にはどのようなSQL文が実行されるのか、知りたくなりMySQLのログを取れるように設定してみました。そのことについて書きます。

記事をざっと見る

MySQLで出力されるログの種類

MySQLから出力されるログはいくつかの種類があります。実際にはどんな種類があるのか検索してみて、こちらのサイトを見つけました。

MySQLのログの種類について知ろう

エラーログ、一般クエリログ、バイナリログ、リレーログ、スロークエリログの5種類があるようです。このうちエラーログデフォルトで出力されるように設定されているため、たまに参照することもあり知っています。

今回はWordPressである動きをしたときにどのようなSQL文を投げているのかを知りたいので 一般クエリログ を取るようにしたいと思います。

一般クエリログが出力されるように設定する XAMPP1.8.1 [PHP: 5.4.7]編

一般クエリログはデフォルトでは出力しない設定になっているので、出力されるようにしたいと思います。

XAMPPをインストールしてあるフォルダにある mysql\bin\ フォルダを開きます。そこに my.ini という設定ファイルがありますので開きます。

[mysqld] というキーワードで検索をします。

[mysqld]
port= 3306
socket = "C:/xampp54/mysql/mysql.sock"
basedir = "C:/xampp54/mysql" 
tmpdir = "C:/xampp54/tmp" 
datadir = "C:/xampp54/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"

検索すると [mysqld] が見つかりだいたいこんな感じの設定になっています。一番下に書いてある log_error という行にエラーログをどこに出力するかが書いてあります。mysql\data\ フォルダを見ると mysql_error.log というファイルが見つかるかと思います。ここにmysqlのエラーログが書き込まれています。

この行の下に、一般クエリログを出力する行を追加します。
 

log="myquery.log"

保存します。XAMPPのフォルダにある mysql_stop.bat で一旦MySQLを止めてから mysql_start.bat で再立ち上げします。

XAMPPにインストールしてあるWordPressのサイトを開いてから mysql\data\ を見ると myquery.log というファイルができていました。

開くと、
 

mysql\bin\mysqld.exe, Version: 5.5.27-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: C:/xampp54/mysql/mysql.sock
Time                 Id Command    Argument
150909 14:44:45        1 Connect    root@localhost on 
            1 Query    SET NAMES utf8mb4
            1 Query    SELECT @@SESSION.sql_mode
            1 Init DB    wordpress
            1 Query    SELECT option_name, option_value FROM wordpress_options WHERE autoload = 'yes'
            1 Query    SELECT option_value FROM wordpress_options WHERE option_name = 'uninstall_plugins' LIMIT 1
            1 Query    SELECT option_value FROM wordpress_options WHERE option_name = 'onp_license_clipboard-images' LIMIT 1

こんな感じで一般クエリーログが出力されていました。

一般クエリログが出力されるように設定する XAMPP5.6.3 [PHP: 5.6.3]編

と、自分が使う分にはこれで良かったのですがblogに書くにあたり「XAMPPのバージョンがPHP5.4のころのものだったから新しいXAMPP5.6でも同じようにできますと書こう」と思い、念のため確認してみました。

同じように my.ini に1行追加して実行しようとすると、mysqlが立ち上がりません(>_<)。何度も見直して全く同じようにいれているのに…と悩みましたがエラーメッセージをよく見てみました
 

[ERROR] mysql\bin\mysqld: ambiguous option '--log=myquery.log' (log-bin, log_slave_updates)

このエラーメッセージを元にググってみると同じようなエラーが出てしまった人のページが見つかり、ログファイルの指定だけでは足りないことが分かりました。ということで

general_log = ON
general_log_file="myquery.log"

このように変更しました。ログファイルも general_log_file= という書き方になっています。これで無事にログが取れることを確認しました。

ということは、と先ほど修正した XAMPP1.8.1 [PHP: 5.4.7] をこの新しい方法に書き直し、MySQLを立ち上げ直して確認したところこの書き方でも問題なく動いていることが分かりました。

XAMPPの各バージョンでの一般クエリログ取得方法を調べてみました

私のPCにはあと2つのバージョンのXAMPPが入っているのですべてについて確認してみました。

確認した2バージョンの他に XAMPP1.7.7 [PHP: 5.3.8]、 XAMPP1.7.1[PHP: 5.2.9] がインストールされています。試してみて分かった結果をマトリックスで表示します

  log=”myquery.log” general_log = ON
general_log_file=”myquery.log”
XAMPP5.6.3 [PHP: 5.6.3] NG OK
XAMPP1.8.1 [PHP: 5.4.7] OK* OK
XAMPP1.7.7 [PHP: 5.3.8] OK* OK
XAMPP1.7.1[PHP: 5.2.9]  OK NG

このような結果になりました。一番古い、XAMPP1.7.1の時点では log= と1行で指定する方法しか有効ではありません。このバージョンまではこれが正しい指定方法だったようです。XAMPP1.7.7とXAMPP1.8.1ではどちらの書き方でもログは取れていましたが、MySQLを立ち上げた時に

 

 [Warning] The syntax '--log' is deprecated and will be removed i
n a future release. Please use '--general-log'/'--general-log-file' instead.

このようなワーニングが出ていました。これはきっと1.7.7あたりから新しいログの指定方法を採用しているのだけれども、いきなりそれまでの指定方法をエラーにすると色々問題が起こるのでワーニングは出すけれども一応動くという状況のようです。この状況のものを OK* としました。XAMPP5.6.3 あたりからはもう旧来の方法ではエラーとするようにしたようです。

と、色々なことが分かりました(^^)/。

おまけ:MySQLの一般クエリログでみたかったもの、と指定は忘れずに解除しましょうということ

この一般クエリログで見たかったのはWordPressで検索をしたときにどのようなSQL文になっているの?ということでした。

エディタ
 という文字を検索したときのSQL文は

SELECT SQL_CALC_FOUND_ROWS  wordpress_posts.ID FROM wordpress_posts  WHERE 1=1  AND (((wordpress_posts.post_title LIKE ‘%エディタ%’) OR (wordpress_posts.post_content LIKE ‘%エディタ%’)))  AND wordpress_posts.post_type IN (‘post’, ‘page’, ‘attachment’, ‘mtssb_article’, ‘faq’) AND (wordpress_posts.post_status = ‘publish’ OR wordpress_posts.post_author = 1 AND wordpress_posts.post_status = ‘private’)  ORDER BY wordpress_posts.post_title LIKE ‘%エディタ%’ DESC, wordpress_posts.post_date DESC LIMIT 0, 16

こんな感じでした!これが見たかったのですっきりしました。

あと、このログはWordPressで検索したときだけでなく表示する時には必ず出力されてしまうのでファイルの大きさが膨大になってしまいます。なので確認が終わったら忘れずに

 

#log="myquery.log"

コメントアウトするか、

 

general_log = OFF
general_log_file="myquery.log"


OFF
 にしておいた方が良さそうです。
[amazon_searchlink search=”PHPプログラム”]

この記事が気に入ったら
いいね または フォローしてね!

あなたのシェアが励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントを残す

記事をざっと見る