Shell Script サンプル
データベースバックアップ
#!/bin/sh
# バックアップ先ディレクトリ
# BKDIR=/var/www/sample/backup/database/full
BKDIR=/data/sample/backup/database/full
# 本スクリプトパス
MYPATH=$(cd $(dirname $0);pwd)
#世代管理(何日分残すか)
DAYAGO="31"
# MySQユーザー
USER=admin
# MySQLパスワード
PASS=password
# 日付・時刻取得し変数に代入
TIMESET=`date +%Y%m%d-%H%I%M`
# バックアップ先ファイル名を設定
# 設定ファイルにあるファイル名+日付.tar.gzする
BKFILE=${BKDIR}/mysql.$TIMESET.tar.gz
# データベース名取得
DBNAME=sample
# DBNAMEデータベースをmysqldumpでバックアップ
# $?は最後に実行したコマンドの戻り値
mysqldump --user=${USER} --password=${PASS} $DBNAME --opt > ${BKDIR}/$(date "+${DBNAME}-%Y%m%d%H%M%S").sql | logger -t mysqldump
if [ $? = 0 ]; then
logger -t mysqldump "Backup OK mysqldump:${DBNAME}"
else
# 失敗したらその旨を表示かつ、ログに保存、メール送信
logger -t mysqldump "Backup NG mysqldump:${DBNAME}"
fi
# yyyymmdd形式のファイルから古い物を削除
# 削除する日付(yyyymmdd)を設定(DAYAGO日前の日付を求める)
tday=`date -d "${DAYAGO} day ago" +%Y%m%d`
# 対象Dir配下のファイル名をwhileに渡し「$list」となる
ls $BKDIR | while read list
do
#ファイル名に「数字x14」が含まれている場合、
if expr "$list" : "sample\-[0-9]\{14\}.sql" > /dev/null; then
# $listから、「yyyymmdd」を取り出しepoch時間($fday)にする
fday=`expr $list : "sample\-\([0-9]\{8\}\)[0-9]\{6\}.sql"`
#ファイル名から取得した「yyyymmdd」がDAYAGOの「yyyymmdd」よりも小さいとき削除
if [ -n "$fday" ] && [ $fday -lt $tday ]; then
# echo する
# echo $list
#削除する
`sudo rm -f ${BKDIR}/${list}`
fi
fi
done