MySQLのログファイル ログの種類と保存先

MySQLのログファイルは、実行エラーログ・クエリログ・スロークエリログ・トランザクションログがあります。
ログファイルはMySQLデータディレクトリに格納されます。
[参考記事] MySQLでクエリーをログに記録する方法

実行エラーログ
クエリログ
スロークエリログ
トランザクションログ

MySQL起動コマンドから設定する方法と、設定ファイルで設定する方法があります。
起動コマンドからの設定の場合はMySQL停止まで有効で、設定ファイルの場合は設定削除後の再起動まで有効です。

ログファイルの格納先(保存先)

ログファイルの格納先(保存先)は設定ファイルのdatadirディレクティブで設定されています。
UNIX、Linuxの場合

[mysql]
datadir=/var/lib/mysql

Windowsの場合

[mysql]
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

設定ファイル

MySQLの設定ファイルはLinuxではmy.cnf、Windowsではmy.iniです。

UNIX、Linuxの場合

/etc/my.cnf

Windowsの場合

C:\Program Files\MySQL\MySQL Server 5.5\my.ini

実行エラーログ

起動、停止及び実行時のエラーが保存されます。
MySQLで障害発生時に障害特定の情報を得ることが出来ます。

コマンドでの設定方法

UNIX、Linuxの場合

$ mysqld_safe --log-error=myerror.log -w 1

Windowsの場合

C\> mysqld-nt --log-error=myerror.log -w 1

-w [-wlevel]
level 0:警告メッセージは記録されません。
level 1:警告メッセージが記録されます。(デフォルト)

設定ファイルでの設定方法

[mysqld]
log-error=myerror.log
log-warnings=1

log-warnings
level 0:警告メッセージは記録されません。
level 1:警告メッセージが記録されます。(デフォルト)

クエリログ

全てのSQL文(接続を含む)が保存されます。
クエリログはクエリを受け取った時点でログを書き込みます。
サーバ負荷の問題があるので、開発時またはデバッグ時に使用します。

コマンドでの設定方法

UNIX、Linuxの場合

$ mysqld_safe -l myquery.log

Windowsの場合

C:\> mysqld-nt -l myquery.log

設定ファイルでの設定方法

[mysqld]
log=myquery.log

スロークエリログ

指定した時間(秒)に処理が終了しなかったSQL文とINDEXを使用しなかったSQL文が保存されます。

コマンドでの設定方法

UNIX、Linuxの場合

$ mysqld_safe --log-slow-queries=myslow.log --long-query-time=30 --log-queries-not-using-indexes --log-slow-admin-statements

Windowsの場合

C:\> mysqld-nt --log-slow-queries=myslow.log --long-query-time=30 --log-queries-not-using-indexes --log-slow-admin-statements
--log-slow-queriesログファイル名
--long-query-timeこの時間より処理が長かった場合にログを出力する
--log-queries-not-using-indexesINDEXを指定しなかった場合にログを出力するよう指定
--log-slow-admin-statements管理用コマンドの実行が遅かった場合もログを出力するよう指定

設定ファイルでの設定方法

[mysqld]
log-slow-queries=myslow.log
long-query-time=30
log-queries-not-using-indexes
log-slow-admin-statements
log-slow-queriesログファイル名
long-query-timeこの時間より処理が長かった場合にログを出力する
log-queries-not-using-indexesINDEXを指定しなかった場合にログを出力するよう指定
log-slow-admin-statements管理用コマンドの実行が遅かった場合もログを出力するよう指定

トランザクションログ

MySQLに対する全てのデータベースの更新情報が保存されます。
サーバのパフォーマンスが約1%程度低下することがあります。

コマンドでの設定方法

UNIX、Linuxの場合

$ mysqld_safe --log-bin=mysbin --log-bin-index=mysql-bin.index --max-binlog-size=1G --expire-log-days=7 --binlog-do-db=members --binlog-do-db=items

Windowsの場合

C:\> mysqld-nt --log-bin=mybin --log-bin-index=mysql-bin.index --max-binlog-size=1G --expire-log-days=7 --binlog-do-db=members --binlog-do-db=items
--log-bin-indexログファイル名
--max-binlog-sizeサイズを超えた場合は、ファイルをローテートして使用
--sync-binlog書き込み時に、ファイル書き込みの同期を行うか指定 0:無効 1:同期
--expire-logs-daysログの保持期間
--binlog-do-db=dbnameログを取るデータベースを指定
--binlog-ignore-db=dbnameログを取らないデータベースを指定

設定ファイルでの設定方法

[mysqld]
log-bin=mysql-bin
log-bin-index=mybin.index
max-binlog-size=1G
expire-log-days=7
binlog-do-db=members
binlog-do-db=items
log-bin-indexログファイル名
max-binlog-sizeサイズを超えた場合は、ファイルをローテートして使用
expire-logs-daysログの保持期間
binlog-do-db=dbnameログを取るデータベースを指定
binlog-ignore-db=dbnameログを取らないデータベースを指定

スポンサーリンク

関連記事

スポンサーリンク

OCTET_LENGTH関数 文字列長をバイト数で求める

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る