0

スロークエリーのログローテーション

第一前提として、スロークエリーのログを保存できるようにしておく。
log-slow-queries=/mnt/log/mysql-slow.log
long_query_time=5
log-queries-not-using-indexes

これは、自分の環境だけなのか mysql-slow.log を予め作っておく必要がある。
mySQLが勝手に生成してくれない。
今も謎。仕様?
# mkdir /mnt/log/mysql-slow.log
# chmod 666 /mnt/log/mysql-slow.log

ログローテーションで使うのでrootのアイパスをmy.cnfに追記しておく。
[mysqladmin]
password = "hogehoge"
user = root

そしてmysqldを再起動。

設定ファイルのテンプレートがyumでmySQLをいれたら入ってたのでそれを利用

# cp /usr/local/mysql/share/mysql/mysql-log-rotate /etc/logrotate.d/

/mnt/log/mysql-slow.log {
notifempty
daily
rotate 3
missingok
compress
postrotate
# just if mysqld is really running
touch /mnt/log/mysql-slow.log
chmod 666 /mnt/log/mysql-slow.log
if test -x /usr/local/mysql/bin/mysqladmin && \
/usr/local/mysql/bin/mysqladmin ping &>/dev/null
then
/usr/local/mysql/bin/mysqladmin flush-logs
fi
endscript
}

上記のようなログファイルが生成されないという問題があるので、無理やりファイルを作ってローテーションする。

そもそもローテーションしないといけないくらいログが溜まること自体問題なのだけど、1ファイルがでかくなり過ぎるのは精神衛生上もよくないので一応やっておく。

0

mmeasure

mmeasureはmySQLの負荷を監視、チューニングのアドバイスを提供してくれるツールです。
今まで知らなかったけど、けっこう古いツールです。
そのままだとmySQL5.1以上は動きません。

cactiでもお馴染のグラフ生成に必要なrrdtoolをインストール
# yum install rrdtool

mmeasureの最新版をダウンロード&展開
# cd /usr/local
# wget http://prdownloads.sourceforge.jp/mmeasure/18557/mmeasure-1.0.7.tar.gz
# tar xvzf mmeasure-1.0.7.tar.gz

mmeasure.confを修正する
# cp mmeasure_template.conf mmeasure.conf

このテンプレートがデフォルトでは設定項目が足りなくて動かないという頑固者。
生成する画像の設定
WEBDIR="$PATH_MMEASURE/web/images/graphs"
WIDTH="400"
WIDTH_SMALL="400"
WIDTH_LARGE="400"
HEIGHT="100"
HEIGHT_SMALL="100"
HEIGHT_LARGE="100"
IMAGEFORMAT="gif"

rrdtoolのパスを変更
PATH_RRDTOOL="/usr/bin/rrdtool"

mySQL関連の設定を変更
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=hogehoge
#MYSQL_PORT=3306
#MYSQL_SOCKET=/tmp/mysql.sock
MYSQL_SLOW_QUERY_LOG="/mnt/log/mysql-slow.log" # なければmy.iniで設定する

mySQL5.1だと起動はするものの数分したらコケるので下記のように男らしく修正
原因はtable_cacheがtable_open_cacheという名前に変わった為。
参考: mmeasuer 1.0.7を無理矢理mysql 5.1に対応させる
find /usr/local/mmeasure/ -type f -print0 | xargs -0 grep -l --null table_cache | xargs -0 perl -i.bak -p -e 's/table_cache/table_open_cache/g;'

同じような原因で、総クエリー回数以下の値を取得できないので、show statusをshow global statusにかえてやる。
find /usr/local/mmeasure/ -type f -print0 | xargs -0 grep -l --null table_cache | xargs -0 perl -i.bak -p -e 's/show status/show global status/g;'

これでmmeasure本体の設定は完了。

続いて、webで表示させるツールなのでhttpdも修正
/etc/httpd/conf.d/mmeasure.conf を作成

Alias /mmeasure/ "/usr/local/mmeasure/web/"
<Directory /usr/local/mmeasure/web/>
AuthUserFile /usr/local/mmeasure/web/.htpasspwd
AuthGroupFile /dev/null
AuthName "User Verification"
AuthType Basic
require valid-user
AddDefaultCharset euc-jp
</Directory>

mmeasure.shを起動
/usr/local/mmeasure/daemon/mmeasure.sh start

mmeasure.shを再起動
/etc/init.d/httpd restart

http://hogehoge.com/mmeasure/ にアクセスするとページが表示される。

注意点として、
「過去のインデックス未使用クエリー内訳」にページャーとかがついてるわけでないので、インデックス未使用クエリーが多いとずらーっと1ページに表示されしまう。

0

cronの実行時間がずれる

海外のクラウドサーバーを使うとデフォルトの時間設定がUTCだったりするわけでそれを下記の設定で変更します。
# mv /etc/localtime /etc/localtime.org
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

これでdateコマンドをうつと、
2010年 8月 18日 水曜日 09:36:34 JST
とちゃんと返ってきます。

ただcronは、このままでは反映されずUTCで動いたままです。
logwatachが真っ昼間に届いたり。

crondを再起動してしまえば即反映されます。
/etc/init.d/crond restart

0

sedで置換

特定のディレクトリを再帰的に検索して文字列を置換。

find /home/www/html -name "*.html" -exec bash -c 'sed 's/javascript/hogehoge/g' {} > {}_tmp' \; -exec mv {}_tmp {} \;

だいぶダサい。

find /home/www/html -type f -name "*.html" -exec grep -l "javascript" {} \;
を組み合わせたら置換したファイルの一覧もでる。