トップ «前の日記(2008年10月17日(Friday)) 最新 次の日記(2008年10月22日(Wednesday))» 編集

たいへん日記

私へ●たいはかせの日記、と言うよりは雑記です.
日々の出来事を書いていくのではなく、普段から思っていることをとりとめもなく書いていくつもりです.
とかなんとか言いながらも日々の行動の記録が大半を占めているあたりがニントモカントモ...

2006|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|10|12|

2008年10月20日(Monday) MySQL にはまる日々

_ [FreeBSD][図書館] MySQL のログをとる

図書館の検索サービスに MySQL で作ったデータベースを採用すべくテスト中なのです.
そんな状況の記録なの.

mysqld で実行したSQLのログがないのか? と探したところ、デフォルトではログはとられていない模様.
自分で設定しなければダメなのです.
そんなわけでgoogleさまにお伺いをたてつつ、しこしこと設定なのです.

_ とりあえず、ログファイルを作ります.
ここで注意.
ログファイルの所有者を mysql とするか、ログファイルのパーミッションを 666 にして誰でも書き込み出来るようにしないとダメなのです.
(ここで一日はまってしまった...(T_T))
誰にでも書き込みが出来る、と言うのは問題がありそうなので、ログファイルの所有者を mysql に変更します.

# touch /var/log/mysqld.log
# chown mysql /var/log/mysqld.log

_ MySQL の設定ファイルは /usr/local/etc/my.cnf です.
用意されているものをコピーし、書き替えます.

# cp /usr/local/share/mysql/my-medium.cnf /usr/local/etc/my.cnf
# chmod 644 /usr/local/etc/my.cnf
# vi /usr/local/etc/my.cnf

_ [mysqld] のセクションに以下のの2行を追加します.
これでmysqldを再起動するとログがとれている筈です.

log-output = FILE
log = /var/log/mysqld.log

_ このまま使っているとログが限りなくふくらむのでログをローテーションさせます.
ログのローテーションの設定ファイルは /etc/newsyslog.conf です.

# vi /etc/newsyslog.conf

_ 検索サービスは19時で終了、としていますので20時にログをローテートさせます.
pid は mysql のホームディレクトリ の mysql ディレクトリの「ホスト名.pid」ファイルに記録されています.
そんなわけで下記の1行を追加します.

/var/log/mysqld.log 644 7 * $D20 B /usr/home/mysql/mysql/ホスト名.pid

_ だがここにも罠があるのよ.
ログファイルの所有者は mysql じゃないとダメなのよ.
newsyslog.conf でローテートさせたログの所有者は自動的に root になるようなの.
これでは具合が悪いぞ.
そんなわけで、ログをローテートさせるのと同時にログファイルの所有者を mysql に変更させるべく、root の crontab に下記の1行を追加するのです.

1 20 * * 1-6 /usr/sbin/chown mysql /var/log/mysqld.log

_ はかせの環境では、この後サーバーをシャットダウンさせ、翌朝再起動するのでこれで問題ないのですが、24時間稼働させる場合は mysqld で ログをフラッシュしないと新しいログファイルを使ってくれないと言う厄介な事もあるの.
その際は crontab に登録するコマンドを下記のようにすると安心なのです.

/usr/sbin/chown mysql /var/log/mysqld.log ; /usr/local/bin/mysqladmin -u root -p MySQLのパスワード flush-logs