2007年10月22日

lftpでバックアップ

必要とは分かっていてもつい怠ってしまうバックアップ、
特に自分が運営するWebサイトのバックアップなんてたまにしか…
共用のレンタルサーバは自宅サーバよりは信頼してるけど、
それでもたまにHDDが逝ってデータ消失、という話は聞く。
ちょっと頑張って自動バックアップのスクリプトなんぞ書いてみた。

自宅サーバ(turbolinux)は容量小さいし、いろんなものが動いてるので、
今回はRAID1導入のNAS(GLANTank、debian)にバックアップを取る。
バックアップデータはFTPでサーバから取得する。
rsyncは使えないっぽいので、lftpを使用してミラーリング。

まずはapt-getでlftpをインストール。

#apt-get update
#apt-get install lftp



続いて自動バックアップ用のスクリプトを作成。
backup.sh
#!/bin/sh

# FTPサーバへの接続情報
USERID=hoge
PASSWORD=********
HOSTNAME=www.hoge.com

# FTP側ソースディレクトリ(リモート)
REMOTEDIR="~/public_html/"

# ミラー側ディレクトリ(ローカル)
LOCALDIR="/share/others/backup/tmp/"

# 圧縮ファイル出力先ディレクトリ
ARCHIVEDIR="/share/others/backup/"

# 圧縮ファイルの最大保存数
LIMIT=10


/usr/bin/lftp <<- END
open -u $USERID,$PASSWORD $HOSTNAME
cd $REMOTEDIR
lcd $LOCALDIR
mirror --delete --only-newer
END

cd $LOCALDIR
tar cf $ARCHIVEDIR/backup-`date '+%Y%m%d'`.tar .
cd $ARCHIVEDIR
gzip backup-`date +%Y%m%d`.tar

if [ $(ls $ARCHIVEDIR/backup*.tar.gz|wc -l) -gt $LIMIT ]; then
CNT=`expr $(ls $ARCHIVEDIR/backup*.tar.gz|wc -l) - $LIMIT`
for file in `ls -t $ARCHIVEDIR/backup*.tar.gz|tail -n $CNT`
do
rm -f $file
done
fi


lftpで指定ディレクトリにミラーリング→圧縮→保存数調整、という流れ。
ミラーリングは高速化のため更新されたものだけ、というようにしてあるから、
LOCALDIRには最後のバックアップ時の生データが残るようになっている。
(tarやgzipあたりがジタバタしてたり、ディレクトリの存在確認をしなかったり、
やや決め打ちなスクリプトなので、使用時にはvオプション等付けて確認を。)

chmodでbackup.shに実行権限を与え、一度走らせてみる。
ミラーリング、圧縮が正しく出来ていればOK。

最後は定期的に実行させるためcronに登録
#crontab -e
0 11 * * 1 /home/hoge/backup.sh

↑毎週月曜日午前11時0分に実行
GLANTankは夜電源を落としてることが多いので。

そんな感じでなんとか成功です。
backup.shには生の認証情報が入ってるし、
バックアップデータにも場合によっては見られたくないデータが入るので、
ディレクトリやパーミッションの設定には注意が必要。
個人使用のLAN内限定ならそれほど気にしなくてもいいかもだけど。

FTPでは直接取得できない、データベース上のデータについては、
mysqldumpや専用のツールでFTPサーバ上にエクスポート、
他のデータと一緒にバックアップすれば問題なしってことで。

0 コメント:

コメントを投稿