MySQLやMariaDBは標準ではログローテートされない
MySQLやMariaDBをインストールすると、ログローテートの設定ファイルが設置されるものの、すべてコメントアウトされていてローテートは実行されません。
これはログローテートを行う際に、ログの書き込みファイルを新しいファイルに変更する(flush-logs)には、mysqladminのroot権限の設定が必要だからです。
ログローテートの設定方法は、標準で設置されるログローテートの設定ファイルのコメントに記載がされています。
ログローテートを実行する方法
/root/.my.cnfを作成し、mysqladminの実行権限を記載します。
# vi /root/.my.cnf
[mysqladmin] password = xxxxxxxx user= root
/root/.my.cnfをrootのみ読み込み可能にします。
# chmod 600 /root/.my.cnf
/etc/logrotate.d/mariadb(MySQLなら/etc/logrotate.d/mysqld)のログローテート部分のコメントアウトを外します。
ログローテートの確認
デバッグモードで実行します。
# logrotate -dv /etc/logrotate.d/mariadb
権限のエラーでローテートされない場合
flush-logsで権限ファイルを指定します。
if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then /usr/bin/mysqladmin flush-logs fi
↓
if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs fi
強制的にログの書き込みファイルを新しいファイルに変更する(flush-logs)には
/usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs
ログローテートのログを出力させる方法
ログローテートが正しく実行されない場合は、ログを出力させたりして調査をします。
ログを出力させるには次のようにします。
# vi /etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 ↓ /usr/sbin/logrotate -v /etc/logrotate.conf >/var/log/logrotate 2>&1
/var/log/logrotateにログが出力されます。
mysqladminの実行権限が間違っていると次のようなログが出力されます。
# cat /var/log/logrotate
running postrotate script /usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' error: error running non-shared postrotate script for /var/log/mysql/error.log of '/var/log/mysql/error.log '
標準で設置されるログローテートの設定ファイル
ログローテートの設定ファイルは、MariaDBであれば、次のようになっています。
/etc/logrotate.d/mariadb
# This logname can be set in /etc/my.cnf # by setting the variable "log-error" # in the [mysqld_safe] section as follows: # # [mysqld_safe] # log-error=/var/log/mariadb/mariadb.log # # If the root user has a password you have to create a # /root/.my.cnf configuration file with the following # content: # # [mysqladmin] # password = <secret> # user= root # # where "<secret>" is the password. # # ATTENTION: This /root/.my.cnf should be readable ONLY # for root ! # Then, un-comment the following lines to enable rotation of mysql's log file: #/var/log/mariadb/mariadb.log { # create 640 mysql mysql # notifempty # daily # rotate 3 # missingok # 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 # fi # endscript #}
This logname can be set in /etc/my.cnf by setting the variable "log-error" in the [mysqld_safe] section as follows: このログ名は、[mysqld_safe]セクションの変数 "log-error"を次のように設定することで/etc/my.cnfに設定できます。
[mysqld_safe] log-error=/var/log/mariadb/mariadb.log
If the root user has a password you have to create a /root/.my.cnf configuration file with the following content: rootユーザーにパスワードがある場合は、次の内容で/root/.my.cnf構成ファイルを作成する必要があります。
[mysqladmin] password = <secret> user= root
where "<secret>" is the password. 「<secret>」はパスワードです。
ATTENTION: This /root/.my.cnf should be readable ONLY for root ! 注意:この/root/.my.cnfはrootだけが読めるはずです。
Then, un-comment the following lines to enable rotation of mysql's log file: 次に、mysqlのログファイルのローテーションを有効にするために次の行のコメントを外します。
#/var/log/mariadb/mariadb.log { # create 640 mysql mysql #ローテーション後に空のログファイルを新規作成。 # notifempty #ログファイルが空ならローテーションしない # daily #ログを毎日ローテーションする # rotate 3 #ローテーションする回数を指定 # missingok #ログファイルが存在しなくてもエラーを出さずに処理を続行 # compress #ローテーションしたログをgzipで圧縮 # postrotate #postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行 # # just if mysqld is really running # if test -x /usr/bin/mysqladmin && \ # /usr/bin/mysqladmin ping &>/dev/null #MySQLサーバが起動中であれば # then # /usr/bin/mysqladmin flush-logs #flush-logsを実行 # fi # endscript #}
関連記事
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
- yumのius(iuscommunity.org)でエラーが出る場合
- iusリポジトリで公開されているパッケージの一覧
- phpMyAdminでログイン画面を出さずにデータベースに接続する方法
- MySQL(MariaDB)をユーザー情報を含めてすべて移行する方法
- 4.0以前と4.1以降のパスワード方式の違い
- CakePHPでカラムを比較してSELECTする方法
- 『Table is marked as crashed and should be repaired』の修復方法
- コマンドやphpMyAdminで複数のデータベースに接続できるユーザーを作成する方法
- phpMyAdminで『information_schema』などを非表示にする方法
- PDO_MYSQLをインストールする方法
- 日付型のフォーマットにスラッシュを使ってはいけません(文字コードによって値が変わる)
- MySQLでdatetime型(日時)を日付で抽出するSQLの速度比較
- データベースを定時バックアップする方法(毎日バックアップする処理)
- MySQL関数のまとめ
- MySQLの処理を停止させる方法
- MySQLサーバに接続できるかどうかを確認する
- 複数のデータベースを切り替える方法(別データベースを使用する)
- MySQLで文字化けを防ぐ方法
- 別テーブルでSELECT JOINしながらUPDATEする方法(SELECTした結果でUPDATEする)
- OpenPNE3のデータベースの設定
- MySQLのログファイル ログの種類と保存先
- 文字コードを指定する方法
- LIMITで件数制限をしつつ、全件数を取得する方法 SQL_CALC_FOUND_ROWS FOUND_ROWS()
- SQL Buddy ブラウザベースのMySQL管理ツール
- Got a packet bigger than 'max_allowed_packet' bytes
- CakePHPのDB接続情報設定
- SQL文で特定の曜日のみ抽出するには
- OpenPNE3のサーバ移行の方法
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- EC-CUBEでMySQLデータベースのデータ取得で文字化けするときの対処法
- symfonyのORマッパ(Propel、Doctrine)
- Ruby on Railsのマイグレーションの型とMySQLの型の対応表
- MySQLでランダムな数字を得る方法
- MySQLでBeep音を消す設定
- Zend_DBのSELECTメソッドのまとめ
- Zend_DBの基本
- MySQLでクエリーをログに記録する方法
- MySQLのインストール
- Zend Frameworkのデータベース接続
- WordPressのインストール
- DB設計を見直してEC-CUBEを高速化する
- WindowsでMySQLを再起動する方法
- レコード挿入時の #1364 - Field doesn't have a default value
- オフセットの後半になると急に遅くなる MySQLの高速化
- Beep音を無効にする
- MySQL Query Browser 本家GUIツール
- CSE(Common SQL Environment) SQL便利ツール
- Symfony PropelでのMySQLの設定方法
- MySQLのソケットエラー
- utf8_general_ci と utf8_unicode_ci の違い
- 文字列型(データ型)のまとめ
- 日付と時刻型(データ型)のまとめ
- 数値型(データ型)のまとめ
- 個体識別情報・UIDの取得方法
- Windows MySQLインストール後の設定
- Windows MySQLのインストール
スポンサーリンク