MySQLで一般クエリーログを出力する設定にする

2021-07-02

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

 

LinuxCentOS 6,CentOS 7,mariadb

Posted by admin