MySQLでログを出力してみる
CentOSにMySQLとMemcacheのインストールしてみる
の続き
MySQLでログを出力してみる。
ログ出力用のディレクトリ作成
まず、ログ出力用のディレクトリを作成しておく。
$ sudo mkdir /var/log/mysql
$ sudo chown mysql:mysql /var/log/mysql
エラーログ
エラーログは、デフォルトの設定で/var/logの下に出力するようになっている。
$ sudo vi /etc/my.cnf ・・・ [mysqld_safe] log-error=/var/log/mysqld.log
作成したmysqlディレクトリに出力させたい場合は、下記のように設定する。
$ sudo vi /etc/my.cnf ・・・ [mysqld_safe] log-error=/var/log/mysql/mysqld.log
設定を変更した場合は、再起動する。
$ sudo service mysqld restart
下記のような感じでエラーログが出力される。
$ sudo cat /var/log/mysql/mysqld.log 140423 10:30:11 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 140423 10:30:11 [Warning] '--default-character-set' is deprecated and will be removed in a future release. Please use '--character-set-server' instead. 140423 10:30:11 InnoDB: Initializing buffer pool, size = 8.0M 140423 10:30:11 InnoDB: Completed initialization of buffer pool 140423 10:30:13 InnoDB: Started; log sequence number 0 44233 140423 10:30:13 [Note] Event Scheduler: Loaded 0 events 140423 10:30:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.1.73' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution
クエリーログ
クエリーのログを出力したい場合は、下記のように設定する。
$ sudo vi /etc/my.cnf ・・・ [mysqld] ・・・ general_log=1 general_log_file=/var/log/mysql/query.log
$ sudo service mysqld restart
なんか適当にSQLを実行すると、
$ mysql -u ユーザー名 -p mysql> なんか適当に実行
クエリーのログが出力される。
$ sudo cat /var/log/mysql/query.log /usr/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with: Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock Time Id Command Argument 140423 10:51:57 1 Connect UNKNOWN_MYSQL_US@localhost as anonymous on 1 Quit 140423 10:52:04 2 Connect hoge@localhost on 2 Query select @@version_comment limit 1 140423 10:52:07 2 Quit
なぜか/var/logの下だとログが出力されなかった。 general_log_file=/var/log/query.log
スロークエリーログ
スロークエリーのログを出力したい場合は、下記のように設定する。
long_query_timeには秒数を指定する(小数も指定可)。
$ sudo vi /etc/my.cnf ・・・ [mysqld] ・・・ slow_query_log=1 slow_query_log_file=/var/log/mysql/slow_query.log long_query_time=0.1
時間のかかるSQLを実行してみる(大量のINSERTをしてみる)
$ mysql -u ユーザー名 -p mysql> use test; mysql> create table sample (id int auto_increment, p int) ENGINE=InnoDB; mysql> insert into sample (p) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); mysql> insert into sample (p) select s1.p from sample s1, sample s2, sample s3, sample s4, sample s5, sample s6;
スロークエリのログが出力される。
$ sudo cat slow_query.log /usr/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with: Tcp port: 0 Unix socket: /var/lib/mysql/mysql.sock Time Id Command Argument # Time: 140523 11:06:59 # User@Host: dev[dev] @ localhost [] # Query_time: 5.481855 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 1000010 use test; SET timestamp=1400810819; insert into sample (p) select s1.p from sample s1, sample s2, sample s3, sample s4, sample s5, sample s6;
設定の確認
ログ周りの設定は下記のSQLで確認できる。
mysql> show variables like '%log%'; +-----------------------------------------+-------------------------------+ | Variable_name | Value | +-----------------------------------------+-------------------------------+ | back_log | 50 | | binlog_cache_size | 32768 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | STATEMENT | | expire_logs_days | 0 | | general_log | ON | | general_log_file | /var/log/mysql/query.log | | innodb_flush_log_at_trx_commit | 1 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_buffer_size | 1048576 | | innodb_log_file_size | 5242880 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_mirrored_log_groups | 1 | | log | ON | | log_bin | OFF | | log_bin_trust_function_creators | OFF | | log_bin_trust_routine_creators | OFF | | log_error | /var/log/mysql/mysqld.log | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_queries | ON | | log_warnings | 1 | | max_binlog_cache_size | 18446744073709547520 | | max_binlog_size | 1073741824 | | max_relay_log_size | 0 | | relay_log | | | relay_log_index | | | relay_log_info_file | relay-log.info | | relay_log_purge | ON | | relay_log_space_limit | 0 | | slow_query_log | ON | | slow_query_log_file | /var/log/mysql/slow_query.log | | sql_log_bin | ON | | sql_log_off | OFF | | sql_log_update | ON | | sync_binlog | 0 | +-----------------------------------------+-------------------------------+