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

2021-07-02

MySQL(MariaDB)で、SQLのクエリーログを出力する

MySQLやMariaDBでクエリーを実行したSQLを出力するには、一般クエリログで確認できるので、この項目を有効にしてログファイルの出力先を指定すれば、ログファイルに出力されます。

「my.cnf」の[mysqld] の設定内で下記のように設定すれば、一般クエリーログは吐き出す設定になります

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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 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  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

設定を変更したら、一般クエリーログを吐き出すディレクトリを作成します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo mkdir /var/log/mysql
$ sudo chown -R mysql /var/log/mysql
$ sudo chmod -R 644 /var/log/mysql
$ sudo mkdir /var/log/mysql $ sudo chown -R mysql /var/log/mysql $ sudo chmod -R 644 /var/log/mysql
$ sudo mkdir /var/log/mysql
$ sudo chown -R mysql /var/log/mysql
$ sudo chmod -R 644 /var/log/mysql

設定ファイルを読み直すためにMySQLを再起動します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Cent OS 6
$ sudo /etc/rc.d/init.d/mysqld restart
# Cent OS 7
$ sudo systemctl restart mysqld
# Cent OS 6 $ sudo /etc/rc.d/init.d/mysqld restart # Cent OS 7 $ sudo systemctl restart mysqld
# Cent OS 6
$ sudo /etc/rc.d/init.d/mysqld restart

# Cent OS 7
$ sudo systemctl restart mysqld

一般クエリーログをログローテートする

一般クエリーログを出力したままでログローテートをしない場合は、ログファイルが肥大化してディスクの容量が圧迫していくのでログローテーションをおこなう設定をします

ログローテートを行うためにlogrotateの設定ファイルに「MySQL」の設定を追加します。
下記ではエラーログ及び一般クエリーログをログローテートしています。ログの保存期間は1週間で設定しています

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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
}
$ 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 }
$ 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」のみ読み書きできるようにパーミションを変更します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo vim /root/.my.cnf
[mysqladmin]
password = password
user = root
$ sudo chmod 600 /root/.my.cnf
$ sudo vim /root/.my.cnf [mysqladmin] password = password user = root $ sudo chmod 600 /root/.my.cnf
$ sudo vim /root/.my.cnf
 
[mysqladmin]
password = password 
user = root

$ sudo chmod 600 /root/.my.cnf

 

スポンサーリンク

0
0

LinuxCentOS 6,CentOS 7,mariadb

Posted by admin