2006年12月5日火曜日

rsyncを使ってファイルの同期をとる

ウェブの開発をしていて、「テストサーバーで開発、確認が取れたら本番サーバーへアップ」という流れになることがよくあります。
これまでそういう場合、"いったんテストサーバーからローカルにコピーして、それを本番サーバーへアップ"という非効率なやり方でやっていたのですが、rsyncが使えそうなので導入してみました。
ちなみにこういう場合、cvsを使うのが一般的らしいですが、csv使ったことないし、今のところバージョン管理も必要としていないのでrsyncを使います。
さっそくググってみると、参考になりそうなサイトがたくさんヒットします。
今回は以下のサイトを参考にさせていただきました。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/096dirsync.html
http://landisk.kororo.jp/diary/28_rsync.php
http://www.aconus.com/~oyaji/backup/rsync.htm
http://linux.paken.org/index.php?rsync%A4%C7%A4%AA%BC%EA%B7%DA%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7
http://www.infoscience.co.jp/technical/rsync/rsync.html
一通り見てみたところ、導入は意外と簡単そう。あと、みなさんだいたいバックアップ用途で使っているようです。
そんなわけでさっそく使ってみました。こんな感じ。
rsync -avz --delete -e ssh /path/to/php/dir test.example.com:/path/to/php

今回は非常にオーソドックスな使い方でしたが、必要に応じて--excludeオプションをつけたり、SSHの公開鍵認証を使ったりすればより便利に使えるようです。
※追記
ディレクトリ指定において、「/path/to/php/dir」と「/path/to/php/dir/」では動きが違ってくるので要注意。--excludeオプションにも影響を与えるので注意が必要。

2006年12月2日土曜日

MySQLで年齢,年代,年代別合計を求める

テーブル:USERTABLE
誕生日カラム:user_birthday

◆年齢を求める
select truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, 0) as age from USERTABLE;

◆年代を求める
select truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1) as age from USERTABLE;

◆年代別合計を求める
select
truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1) as age,
count(*)
from
USERTABLE
group by truncate(((curdate() + 0) - (user_birthday + 0)) / 10000, -1);
※日付に+0することで数値型に変換される