現在のページの位置: くろねこスクエア Labs >

くろねこスクエア Labs

Maildirをバックアップするシェルスクリプト

参考程度になるかもしれませんので、当サイトで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

GeoIP 用のアップデートスクリプト

ちょっとした環境変数を確認するために簡単な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

カテゴリー

Feed

メタ情報