MySQLのバックアップ

phpMyBackupProでとってたんだけど、正確に言うと、とってたつもりになってたんだけど、小さいDBはとれるけど、ある程度のサイズ以上の、つまりバックアップの必要性が高いDBのバックアップはとれてないという、なんだこれ!という現象を発見し唖然。
 
phpMyBackupPro自体、評判はいいし、いろんなところで取り上げられているので、十中八九うちの環境の問題だと思うんだけど(メモリが足りないとかパーミッションがなんとかとか)、どこで失敗してるか調べるガッツがたまたまなかったので、ググって「AutoMySQLBackup」というのを見つけてきた。

AutoMySQLBackup

これは1本の shファイルで、なかを見るといろいろできそうだけど、とりあえず使うには、http://kunik.no-ip.com/2007/06/13/2106/install-automysqlbackup.htmlを参考にちょろちょろっとやればOK。

USERNAME=user
PASSWORD=password
DBHOST=localhost
DBNAMES="wpmu wpmu29"
BACKUPDIR="/home/www/backups"

#DATE=`date +%Y-%m-%d_%Hh%Mm`
DATE=`date +%Y-%m-%d_%H%M`
#DOW=`date +%A`
DOW=`date +%w`

DB関係を変えただけだと、日本語UTF-8ロケールなうちの環境では、できるファイルが「wpmu_2010-01-21_19h07m.木曜日.sql.gz」みたいになって、これを解凍するとさらに悲惨なこんなファイル「wpmu_2010-01-21_13h47m.譛ィ譖懈律.sql」ができてしまうので、曜日のところを曜日番号にしてみた。

ちょっとしたこと

でもって、crontab -e で毎日起動にしておいた。

30 0  * * * /home/www/automysqlbackup0.sh  > /dev/null 2>&1
30 12 * * * /home/www/automysqlbackup12.sh > /dev/null 2>&1

実は 0:30と 12:30の2回起動にしたくて、*/12とかで登録したかったんだけど、こいつは賢いことにデイリーバックアップを曜日で持つようになっているので、つまり、ファイルを作成する前にその曜日のファイルを消してしまうので、2回バックアップが起動しても常に最後のやつしか残らないという罠。
やりたいのは、1日2回分を7日分、計14履歴を保持したいんで、曜日で消してるところを「曜日+午前午後」で消すようにすればいいんだけど、dateの%指定に午前午後を数字で返すのがみつからなかったので、ひよって shファイルを分けて、午前と午後を別々のフォルダに書きだすようにしてしまった。
1日4回バックアップとかのニーズがでてきたら、ちゃんとやることにする。

いろいろTips

別のユーザでコマンドを実行する

nobodyユーザでコマンドを実行したいときなどに便利
0119:別のユーザでコマンドを実行する方法

$ sudo -u nobody command

起動時に実行させたいコマンド

/etc/rc.localに記述しておく。(ここに書いちゃダメという意見はあるけど)

cd /home/www/2.5-55.jp
ruby lib/yahoo_psearch.rb loop
sudo -u nobody ruby /home/hml/sendlater.rb
sudo -u nobody ruby /home/fmail/sendml.rb
exit 0

圧縮ファイルをダウンロードしてきて解凍

$ wget http://nanchara.com/xxx.tar.gz
$ tar xfvs xxx.tar.gz

WordPress MUに memcachedを導入

※ やっぱり外した
管理ページの挙動がおかしい。プラグインを使用しないにしてもサイドバーのプラグイン設定が有効で、実際そのプラグインが生きていたり、サイトの切替えをやったら設定項目に全然別のサイトの項目が表示されたり。
WordPressが自前でオブジェクト・キャッシュしている内容と memcachedがキャッシュしてる内容が混ざるような気がする。memcachedが悪いとは思えないので、memcachedはそのまま有効にして、object-cache.phpを使わないようにして様子をみます。でも使わないと全然キャッシュが効いてこないんだよね。

 
特に遅くなったわけじゃないんだけど、劇速ということらしいのでテスト環境のWordPress MUmemcachedを入れてみた。

手順1

http://blog.f14s.biz/?p=760の通り。

# apt-get install php-pear
# apt-get install php5-dev
# apt-get install build-essential
# pecl install memcache

上の3つは4番目をやるとき、peclがねぇ、phpizeがねぇ、makeがねぇと言われたため。

手順2

# e /etc/php5/apache2/conf.d/memcache.ini

extension=memcache.so

このファイル(/etc/php5/apache2/conf.d/memcache.ini)はないから作ります。apache2/conf.dに設定を置いておくと、apacheが起動時に読み込んでくれると。

# apt-get install memcached
# /etc/init.d/apache2 restart

これで memcachedが起動します。

手順3

確認方法は、これ(↓)だけ書いたファイルを Webからアクセスできるところに置いて表示させます。

<?php  phpinfo()  ?>

結果はこんな感じ。

手順4

次に、http://plugins.trac.wordpress.org/browser/memcached/trunk/object-cache.phpから object-cache.phpをダウンロード。
Plain Textがテキストファイルとしてのダウンロード・リンク。
この object-cache.phpを wp-content/ 直下におく。

手順5

MySQLのチューニング。

$ e /etc/mysql/my.cnf

[mysqld]
query_cache_limit = 1M
query_cache_size = 24M
query_cache_min_res_unit= 4k
query_cache_type = 1

memcachedのチューニング。Kosei Kitahara's Blog: ubuntu で nginx から memcache を利用するを参考にしました。

$ e /etc/memcached.conf 

-m 128
# /etc/init.d/mysql restart
# /etc/init.d/memcached restart

http://www.alink.co.jp/tech/blog/2009/05/06/memcached-php%E3%81%A7memcached%E3%81%AE%E7%A8%BC%E5%83%8D%E7%8A%B6%E6%B3%81%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF/で紹介されている memcache.phpを入れておけば、キャッシュのヒット率なんかがわかってベターです。

PHPのモジュール版とCGI版の比較

自分向けのメモ。

  • PHPモジュール版とは、ApacheのモジュールとしてPHPを起動すること。新たなプロセスがクリエイトされず、速い、省資源。
  • では、CGI版を動かす積極的な動機は?
    PHPがセーフモードで設定されていてディレクトリのクリエイトができないときに、CGI版だとsuEXECで制限を回避できる。
  • PHPのセーフモードは『PHP 5.3.0 で非推奨となり、PHP 6.0.0 で削除』だそうです。

詳細は、PHP における「モジュール版」と「CGI 版」の比較 + WordPress の適用例: 小粋空間 に尽きます。

マウスオーバーで表示文字を変える

今時こんなことでそう悩む人はいないだろうけど、あれっと思ったので自分用の覚書きとして。

<a href="/newitem/"
 onMouseOver="jQuery('#new_li').text('新着'); jQuery('#new_li').css('color','#46D7FA');"
 onMouseOut ="jQuery('#new_li').text('new');  jQuery('#new_li').css('color','#191919');"
 style='color:#191919;'>
<img src="/item.jpg" alt="新着" width="92" height="76"></a>
<a href="/newitem/"
 onMouseOver="jQuery('#new_li').text('新着'); jQuery('#new_li').css('color','#46D7FA');"
 onMouseOut ="jQuery('#new_li').text('new');  jQuery('#new_li').css('color','#191919');" 
 style='color:#191919;' id="new_li">new</a></li>

jQueryが入っている前提。別にこれしきの事に jQueryを入れろということではなく、普通に入っていたから。しかも、$がコンフリクトして使えない環境で。
 
画像と文字が上下に並んでいて、どっちにマウスオーバーしても文字の方を「new」から「新着」に変えて、表示色も変えるという処理。styleで初期の色を指定しておくのがコツかな。(スタイル継承が効いているとき)