参考程度になるかもしれませんので、当サイトでMaildirをバックアップするために使っているスクリプトを載せておきます。curとnewディレクトリだけを保存し、古いファイルを削除できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/bin/sh
# Remains at least these days
keepday=14
HOMEDIR=/usr/local
MAILDIR=$HOMEDIR/Maildir
BACKUPDIR=$HOMEDIR/backup_mail
FOLDERS="kuroneko-square.net"
# Get timestamp
timestamp=`date +%Y%m%d`
old_date=`date "-d$keepday days ago" +%Y%m%d`
cd $MAILDIR
for F in $FOLDERS; do
NAME=$BACKUPDIR/INBOX-$F-$timestamp.tar.gz
FILES_CUR="`find $F -regex ".*cur.*"`"
FILES_NEW="`find $F -regex ".*new.*"`"
tar -cvzf $NAME $FILES_CUR $FILES_NEW
rmfile=$BACKUPDIR/INBOX-$F-$old_date.tar.gz
if [ -e $rmfile ]; then
rm -f $rmfile
fi
done
exit |
ちょっとした環境変数を確認するために簡単なENV Checkerを置いてみたのですが、せっかくなので接続元地域の判定も入れてあります。
ただし、IPアドレスのデータベースを持つのは大変なので、MaxMind
社が配布している
GeoLite Countryを利用させていただいています。このデータは毎月更新されるようなので、GeoIPの利用方法のシェルスクリプトを参考に、過去2ヶ月分を残し、それより前のデータを削除するスクリプトを追加してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #! /bin/sh
# Remains at least these months
keepmonth=2
TMPDIR=$HOME/tmp
GEODIR=$HOME/share/GeoIP
DAT=GeoIP.dat
# Get timestamp
timestamp=`date +%Y%m`
old_date=`date "-d$keepmonth months ago" +%Y%m`
cd $TMPDIR
#/usr/bin/wget http://www.maxmind.com/download/geoip/database/$DAT.gz
/usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/$DAT.gz
if [ $? != 0 ] ; then
echo "wget failed"
exit 1
fi
/bin/gunzip $DAT.gz
if [ $? != 0 ] ; then
echo "gunzip failed"
exit 2
fi
cd $GEODIR
/bin/mv $DAT $DAT.$timestamp
/bin/mv $TMPDIR/$DAT .
rmfile=$DAT.$old_date
if [ -e $rmfile ]; then
rm -f $rmfile
fi
exit |
1ヶ月ごとにcronを回せばデータベースを自動更新してくれるので、いわゆるメンテナンスフリーになります。
バックアップの保存期間を延長し、バックアップ環境を強化しました。cronにて定時バックアップをとり、さらに数日分を残すようにしました。
ところで、MySQLのバックアップ用スクリプトとして、AutoMySQLBackupというのがありました。手軽に使えていいかもしれませんね。
以下はcronでMySQLを定期バックアップするための覚え書きです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #!/bin/sh
# MySQL Backup
# Remains at least these days
keepday=14
# Settings
dest=$HOME/backup_mysql
tmp=$HOME/tmp
srcfile=mysql.dump
user=user
db=dbname
# Dump
/usr/local/mysql/bin/mysqldump -u root --password='パスワード' --opt データベース名 > /*****/backup/temp
# Get timestamp
timestamp=`date +%Y%m%d`
old_date=`date "-d$keepday days ago" +%Y%m%d`
bkfile=$dest/$srcfile-$timestamp.tar.gz
cd $tmp; tar zcvf $bkfile $srcfile
cd $HOME
# > /dev/null 2>&1
if [ $? != 0 -o ! -e $bkfile ]; then
echo "backup faild -- ($tmp/$srcfile)"
exit 1
fi
rmfile=$dest/$srcfile-$old_date.tar.gz
if [ -e $rmfile ]; then
rm -f $rmfile
fi
rm -f $tmp/$srcfile
exit |