MySQLで一般クエリーログを出力する設定にする
MySQL(MariaDB)で、SQLのクエリーログを出力する
MySQLやMariaDBでクエリーを実行したSQLを出力するには、一般クエリログで確認できるので、この項目を有効にしてログファイルの出力先を指定すれば、ログファイルに出力されます。
「my.cnf」の[mysqld] の設定内で下記のように設定すれば、一般クエリーログは吐き出す設定になります
$ sudo vim /etc/my.cnf [mysqld] (省略) # 一般クエリーログ general_log=1 general_log_file=/var/log/mysql/mysql.log # エラーログ [mysqld_safe] log-error=/var/log/mysql/error.log pid-file=/var/run/mysqld/mysqld.pid
設定を変更したら、一般クエリーログを吐き出すディレクトリを作成します
$ sudo mkdir /var/log/mysql $ sudo chown -R mysql /var/log/mysql $ sudo chmod -R 644 /var/log/mysql
設定ファイルを読み直すためにMySQLを再起動します
# Cent OS 6 $ sudo /etc/rc.d/init.d/mysqld restart # Cent OS 7 $ sudo systemctl restart mysqld
一般クエリーログをログローテートする
一般クエリーログを出力したままでログローテートをしない場合は、ログファイルが肥大化してディスクの容量が圧迫していくのでログローテーションをおこなう設定をします
ログローテートを行うためにlogrotateの設定ファイルに「MySQL」の設定を追加します。
下記ではエラーログ及び一般クエリーログをログローテートしています。ログの保存期間は1週間で設定しています
$ sudo vi /etc/logrotate.d/mysql /var/log/mysql/error.log /var/log/mysql/mysql.log { # create 600 mysql mysql daily rotate 14 missingok dateext compress postrotate # just if mysqld is really running if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then /usr/bin/mysqladmin flush-logs --defaults-extra-file=/root/.my.cnf fi endscript }
ログローテートする時に「mysqladmin flush-logs」を実行します。その際に認証ファイルが必要になります。
認証ファイルには実行ユーザーとパスワードを設定する必要がありますので、「/root/.my.cnf」の認証ファイルを作ります
パスワードを記載しているので「root」のみ読み書きできるようにパーミションを変更します
$ sudo vim /root/.my.cnf [mysqladmin] password = password user = root $ sudo chmod 600 /root/.my.cnf
ディスカッション
コメント一覧
まだ、コメントがありません