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 | 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') ・・・・・・・・・・・・・