MySQLの運用基礎知識 〜 運用に必要な代表的なファイル

◎ログファイル

ログファイル名 mysqldの起動オプション 説明 出力先
errorログ --log-error サーバから出力されるエラーメッセージを記録する。--log-warnings=数字を指定すると、ワーニングも記録する。 my.cnfまたはmy.iniにファイル名を指定する。指定しなかった場合は、datadir直下。ホスト名.errというファイルに出力される。
Slow Queryログ --slow_query_log 処理に時間のかかったクエリを記録する。記録対象とするクエリの処理時間は、--long_query_time[=時間]で指定する。 my.cnfまたはmy.iniにファイル名を指定する。指定しなかった場合は、datadir直下。ホスト名-slow.logというファイルに出力される。
詳細ログ(general log) --general-log データベース活動の詳細な情報を記録する。接続ユーザ名、接続時刻、実行クエリなどを記録する。 my.cnfまたはmy.iniにファイル名を指定する。指定しなかった場合は、datadir直下。ホスト名.logというファイルに出力される。
バイナリログ --log-bin[=ベース名] 発行された更新系のSQLを全て記録する。リカバリレプリケーションなど、データベース運用のうえでクリティカルになる非常に重要なファイル。 my.cnfにファイル名を指定する。指定しなかった場合は、datadir直下。ホスト名-bin.indexというファイルに出力される。
debugログ --debug 開発者向けのトレースログ。 mysql5.6.20で設定してみたが、設定が反映されずエラーとなるので、いったん保留。

◎ログファイルの確認
実際にログファイルを確認する。
まずは、エラーログの確認。my.confに指定されているかを確認する。

root@ubuntu:~# less /etc/mysql/my.cnf
・・・・
log-error       = /var/log/mysql/error.log
・・・・

/var/log/mysql/error.logにエラーログを出力する設定としている。確認する。

root@ubuntu:~# ls /var/log/mysql
error.log  error.log.1.gz  error.log.2.gz  error.log.3.gz  error.log.4.gz

次に、Slow Queryログを確認する。
datadir直下を検索する。出力されていない。
これは条件を満たすSQLを発行しないと出力されないだろうから気にしない。

root@ubuntu:~# ls /var/lib/mysql/
auto.cnf         ibdata1      ib_logfile1  mysql_upgrade_info  sampleDb
debian-5.5.flag  ib_logfile0  mysql        performance_schema  testdb

詳細ログの出力を指定する。

#vi /etc/mysql/my.cnf
general_log
general_log_file = /var/log/mysql/general.log

詳細ログを確認する。
確かに指定した名前general.logで出力されている。

root@ubuntu:~# ls /var/log/mysql
error.log       error.log.3.gz  general.log        master-bin.000003
error.log.1.gz  error.log.4.gz  master-bin.000001  master-bin.000004
error.log.2.gz  error.log.5.gz  master-bin.000002  master-bin.index

バイナリログの出力を指定する。

log-bin = /var/log/mysql/master-bin
log-bin-index = /var/log/mysql/master-bin

ログを確認する。

root@ubuntu:~# ls -tl /var/log/mysql
total 144
-rw-r----- 1 mysql adm 112123 Sep 14 18:26 error.log
-rw-rw---- 1 mysql adm    120 Sep 14 18:26 master-bin.000001
-rw-rw---- 1 mysql adm     33 Sep 14 18:26 master-bin.index
-rw-r----- 1 mysql adm   3111 Sep 13 05:33 error.log.1.gz

最後に、mysqlslapを使用してSQLを流して、ログを確認してみる。

root@ubuntu:~# mysqlslap --user=[ユーザ名] --password=[パスワード] --host=localhost --port=3306 --engine=innodb --auto-generate-sql --auto-generate-sql-load-type=write --auto-generate-sql-add-autoincrement --iterations=10
Warning: Using a password on the command line interface can be insecure.
mysqlslap: Error when connecting to server: 1049 Unknown database 'mysqlslap'
Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 1.021 seconds
        Minimum number of seconds to run all queries: 1.021 seconds
        Maximum number of seconds to run all queries: 1.021 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

general.logをtailで確認する。なんかでてるw。ここではログの詳細については触れないw。

root@ubuntu:~# tail -f /var/log/mysql/general.log

140914 19:29:59    38 Connect   root@localhost on
                   38 Query     DROP SCHEMA IF EXISTS `mysqlslap`
                   38 Query     CREATE SCHEMA `mysqlslap`
                   38 Init DB   mysqlslap
                   38 Query     set storage_engine=`innodb`
                   38 Query     CREATE TABLE `t1` (id serial,intcol1 INT(32) ,charcol1 VARCHAR(128))
                   38 Query     INSERT INTO t1 VALUES (NULL,1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL')
                   38 Query     INSERT INTO t1 VALUES (NULL,822890675,'97RGHZ65mNzkSrYT3zWoSbg9cNePQr1bzSk81qDgE4Oanw3rnPfGsBHSbnu1evTdFDe83ro9w4jjteQg4yoo9xHck3WNqzs54W5zEm92ikdRF48B2oz3m8gMBAl11W')
                   38 Query     INSERT INTO t1 VALUES (NULL,1308044878,'50w46i58Giekxik0cYzfA8BZBLADEg3JhzGfZDoqvQQk0Akcic7lcJInYSsf9wqin6LDC1vzJLkJXKn5onqOy04MTw1WksCYqPl2Jg2eteqOqTLfGCvE4zTZwWvgMz')
・・・・・・・・・・・・・